Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(400)

Unified Diff: content/child/web_gesture_curve_impl.cc

Issue 764403002: Expand UMA coverage for compositor-handled events and fling FPS (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix build Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/child/web_gesture_curve_impl.cc
diff --git a/content/child/web_gesture_curve_impl.cc b/content/child/web_gesture_curve_impl.cc
index 5324b363969b68d273288b2a734eefa2afc4922e..da8a18cecaf9e1b34016c612f07ac35af0ac53a1 100644
--- a/content/child/web_gesture_curve_impl.cc
+++ b/content/child/web_gesture_curve_impl.cc
@@ -5,10 +5,12 @@
#include "content/child/web_gesture_curve_impl.h"
#include "base/logging.h"
+#include "base/metrics/histogram.h"
#include "third_party/WebKit/public/platform/WebFloatSize.h"
#include "third_party/WebKit/public/platform/WebGestureCurveTarget.h"
#include "ui/events/gestures/fling_curve.h"
-#include "ui/gfx/vector2d.h"
+#include "ui/gfx/geometry/safe_integer_conversions.h"
+#include "ui/gfx/geometry/vector2d.h"
#if defined(OS_ANDROID)
#include "ui/events/android/scroller.h"
@@ -45,25 +47,57 @@ scoped_ptr<ui::GestureCurve> CreateDefaultPlatformCurve(
// static
scoped_ptr<WebGestureCurve> WebGestureCurveImpl::CreateFromDefaultPlatformCurve(
const gfx::Vector2dF& initial_velocity,
- const gfx::Vector2dF& initial_offset) {
- return CreateFrom(CreateDefaultPlatformCurve(initial_velocity),
- initial_offset);
+ const gfx::Vector2dF& initial_offset,
+ bool on_main_thread) {
+ return scoped_ptr<WebGestureCurve>(new WebGestureCurveImpl(
+ CreateDefaultPlatformCurve(initial_velocity), initial_offset,
+ on_main_thread ? ThreadType::MAIN : ThreadType::IMPL));
}
// static
-scoped_ptr<WebGestureCurve> WebGestureCurveImpl::CreateFrom(
+scoped_ptr<WebGestureCurve> WebGestureCurveImpl::CreateFromUICurveForTesting(
scoped_ptr<ui::GestureCurve> curve,
const gfx::Vector2dF& initial_offset) {
return scoped_ptr<WebGestureCurve>(
- new WebGestureCurveImpl(curve.Pass(), initial_offset));
+ new WebGestureCurveImpl(curve.Pass(), initial_offset, ThreadType::TEST));
}
WebGestureCurveImpl::WebGestureCurveImpl(scoped_ptr<ui::GestureCurve> curve,
- const gfx::Vector2dF& initial_offset)
- : curve_(curve.Pass()), last_offset_(initial_offset) {
+ const gfx::Vector2dF& initial_offset,
+ ThreadType animating_thread_type)
+ : curve_(curve.Pass()),
+ last_offset_(initial_offset),
+ animating_thread_type_(animating_thread_type),
+ ticks_since_first_animate_(0),
+ first_animate_time_(0),
+ last_animate_time_(0) {
}
WebGestureCurveImpl::~WebGestureCurveImpl() {
+ if (ticks_since_first_animate_ <= 1)
+ return;
+
+ if (last_animate_time_ <= first_animate_time_)
+ return;
+
+ switch (animating_thread_type_) {
+ case ThreadType::MAIN:
+ UMA_HISTOGRAM_CUSTOM_COUNTS(
+ "Event.Frequency.Renderer.FlingAnimate",
+ gfx::ToRoundedInt(ticks_since_first_animate_ /
+ (last_animate_time_ - first_animate_time_)),
+ 1, 240, 120);
+ break;
+ case ThreadType::IMPL:
+ UMA_HISTOGRAM_CUSTOM_COUNTS(
+ "Event.Frequency.RendererImpl.FlingAnimate",
+ gfx::ToRoundedInt(ticks_since_first_animate_ /
+ (last_animate_time_ - first_animate_time_)),
+ 1, 240, 120);
+ break;
+ case ThreadType::TEST:
+ break;
+ }
}
bool WebGestureCurveImpl::apply(double time,
@@ -73,6 +107,16 @@ bool WebGestureCurveImpl::apply(double time,
if (time <= 0)
return true;
+ if (!first_animate_time_) {
+ first_animate_time_ = last_animate_time_ = time;
+ } else if (time != last_animate_time_) {
+ // Animation can occur multiple times a frame, but with the same timestamp.
+ // Suppress recording of such redundant animate calls, avoiding artificially
+ // inflated FPS computation.
+ last_animate_time_ = time;
+ ++ticks_since_first_animate_;
+ }
+
const base::TimeTicks time_ticks =
base::TimeTicks() + base::TimeDelta::FromSecondsD(time);
gfx::Vector2dF offset, velocity;

Powered by Google App Engine
This is Rietveld 408576698