Commit 318a9ac4 authored by binlu's avatar binlu Committed by Commit bot

Measure detailed usage of navigator.vibrate for user gesture, subframe & cross-origin iframe.

BUG=621397
R=ojan@chromium.org,japhet@chromium.org

Review-Url: https://codereview.chromium.org/2082463002
Cr-Commit-Position: refs/heads/master@{#402601}
parent aaa8bdbc
......@@ -24,6 +24,8 @@
#include "core/frame/UseCounter.h"
#include "core/page/Page.h"
#include "modules/vibration/VibrationController.h"
#include "platform/Histogram.h"
#include "platform/UserGestureIndicator.h"
namespace blink {
......@@ -70,10 +72,7 @@ bool NavigatorVibration::vibrate(Navigator& navigator, const VibrationPattern& p
// reference to |window| or |navigator| was retained in another window.
if (!frame)
return false;
UseCounter::count(frame, UseCounter::NavigatorVibrate);
if (!frame->isMainFrame())
UseCounter::count(frame, UseCounter::NavigatorVibrateSubFrame);
collectHistogramMetrics(*frame);
DCHECK(frame->document());
DCHECK(frame->page());
......@@ -84,6 +83,35 @@ bool NavigatorVibration::vibrate(Navigator& navigator, const VibrationPattern& p
return NavigatorVibration::from(navigator).controller()->vibrate(pattern);
}
// static
void NavigatorVibration::collectHistogramMetrics(const LocalFrame& frame)
{
NavigatorVibrationType type;
bool userGesture = UserGestureIndicator::processingUserGesture();
UseCounter::count(&frame, UseCounter::NavigatorVibrate);
if (!frame.isMainFrame()) {
UseCounter::count(&frame, UseCounter::NavigatorVibrateSubFrame);
if (frame.isCrossOrigin()) {
if (userGesture)
type = NavigatorVibrationType::CrossOriginSubFrameWithUserGesture;
else
type = NavigatorVibrationType::CrossOriginSubFrameNoUserGesture;
} else {
if (userGesture)
type = NavigatorVibrationType::SameOriginSubFrameWithUserGesture;
else
type = NavigatorVibrationType::SameOriginSubFrameNoUserGesture;
}
} else {
if (userGesture)
type = NavigatorVibrationType::MainFrameWithUserGesture;
else
type = NavigatorVibrationType::MainFrameNoUserGesture;
}
DEFINE_STATIC_LOCAL(EnumerationHistogram, NavigatorVibrateHistogram, ("Vibration.Context", NavigatorVibrationType::EnumMax));
NavigatorVibrateHistogram.count(type);
}
VibrationController* NavigatorVibration::controller()
{
if (!m_controller && frame())
......
......@@ -33,6 +33,16 @@ namespace blink {
class Navigator;
class VibrationController;
enum NavigatorVibrationType {
MainFrameNoUserGesture = 0,
MainFrameWithUserGesture = 1,
SameOriginSubFrameNoUserGesture = 2,
SameOriginSubFrameWithUserGesture = 3,
CrossOriginSubFrameNoUserGesture = 4,
CrossOriginSubFrameWithUserGesture = 5,
EnumMax = 6
};
class MODULES_EXPORT NavigatorVibration final
: public GarbageCollectedFinalized<NavigatorVibration>
, public Supplement<Navigator>
......@@ -61,6 +71,8 @@ private:
// Inherited from DOMWindowProperty.
void willDetachGlobalObjectFromFrame() override;
static void collectHistogramMetrics(const LocalFrame&);
Member<VibrationController> m_controller;
};
......
......@@ -61268,6 +61268,14 @@ http://cs/file:chrome/histograms.xml - but prefer this file for new entries.
</summary>
</histogram>
<histogram name="Vibration.Context" enum="NavigatorVibrationType">
<owner>binlu@google.com</owner>
<summary>
Records instances of navigator.vibrate. Includes whether or not it comes
with a user gesture, same-origin subframe or cross-origin subframe.
</summary>
</histogram>
<histogram name="VideoPlayer.CastAPIExtensionStatus"
enum="VideoPlayerCastAPIExtensionStatus">
<owner>yoshiki@chromium.org</owner>
......@@ -82856,6 +82864,15 @@ To add a new entry, add it with any value and run test to compute valid value.
<int value="9" label="blob"/>
</enum>
<enum name="NavigatorVibrationType" type="int">
<int value="0" label="Main frame vibrate, no user gesture"/>
<int value="1" label="Main frame vibrate, with user gesture"/>
<int value="2" label="Same-origin subframe vibrate, no user gesture"/>
<int value="3" label="Same-origin subframe vibrate, with user gesture"/>
<int value="4" label="Cross-origin subframe vibrate, no user gesture"/>
<int value="5" label="Cross-origin subframe vibrate, with user gesture"/>
</enum>
<enum name="NetCacheState" type="int">
<int value="0" label="FROM_CACHE"/>
<int value="1" label="STILL_VALID"/>
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment