summaryrefslogtreecommitdiffstats
path: root/cc
diff options
context:
space:
mode:
authorbrianderson@chromium.org <brianderson@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-10-25 19:46:46 +0000
committerbrianderson@chromium.org <brianderson@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-10-25 19:46:46 +0000
commitde2cf8caf24f9dff41462b4ed164d18c553b30e3 (patch)
tree9b7833a432e15c49b8217d529e17cc474c0e47af /cc
parent406e93caa0d00078548cbbb830767f5cc976e32d (diff)
downloadchromium_src-de2cf8caf24f9dff41462b4ed164d18c553b30e3.zip
chromium_src-de2cf8caf24f9dff41462b4ed164d18c553b30e3.tar.gz
chromium_src-de2cf8caf24f9dff41462b4ed164d18c553b30e3.tar.bz2
cc: Use HighResNow as timebase if it is fast and reliable
If base::TimeTicks::HighResNow is fast and reliable, we use it for frame times, animations, and scheduling. Otherwise, we use base::TimeTicks::Now and use a timebase of zero to avoid an incorrect or jittery timebase. This adds a gfx::FrameTime::Now() function, so the same timebase is used across the ui and cc directories. Additionally, the OutputSurface now uses a HighRes version of the DelayBasedTimesource if gfx::FrameTime::Now() is HighRes. BUG=303356 Review URL: https://codereview.chromium.org/27710005 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@231089 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'cc')
-rw-r--r--cc/input/top_controls_manager.cc5
-rw-r--r--cc/input/top_controls_manager_unittest.cc13
-rw-r--r--cc/layers/delegated_renderer_layer_impl_unittest.cc49
-rw-r--r--cc/output/begin_frame_args.cc7
-rw-r--r--cc/output/output_surface.cc12
-rw-r--r--cc/output/output_surface_unittest.cc3
-rw-r--r--cc/resources/resource_update_controller.cc3
-rw-r--r--cc/scheduler/delay_based_time_source.cc21
-rw-r--r--cc/scheduler/delay_based_time_source.h19
-rw-r--r--cc/scheduler/frame_rate_controller.cc3
-rw-r--r--cc/scheduler/scheduler.cc3
-rw-r--r--cc/scheduler/scheduler_state_machine.cc3
-rw-r--r--cc/test/layer_tree_test.cc3
-rw-r--r--cc/trees/layer_tree_host_impl.cc3
-rw-r--r--cc/trees/layer_tree_host_impl_unittest.cc123
-rw-r--r--cc/trees/layer_tree_host_unittest.cc8
-rw-r--r--cc/trees/single_thread_proxy.cc3
-rw-r--r--cc/trees/thread_proxy.cc3
18 files changed, 170 insertions, 114 deletions
diff --git a/cc/input/top_controls_manager.cc b/cc/input/top_controls_manager.cc
index 1d1b1a2..871d9e6 100644
--- a/cc/input/top_controls_manager.cc
+++ b/cc/input/top_controls_manager.cc
@@ -7,11 +7,12 @@
#include <algorithm>
#include "base/logging.h"
-#include "base/time/time.h"
#include "cc/animation/keyframed_animation_curve.h"
#include "cc/animation/timing_function.h"
#include "cc/input/top_controls_manager_client.h"
+#include "cc/output/begin_frame_args.h"
#include "cc/trees/layer_tree_impl.h"
+#include "ui/gfx/frame_time.h"
#include "ui/gfx/transform.h"
#include "ui/gfx/vector2d_f.h"
@@ -194,7 +195,7 @@ void TopControlsManager::SetupAnimation(AnimationDirection direction) {
top_controls_animation_ = KeyframedFloatAnimationCurve::Create();
double start_time =
- (base::TimeTicks::Now() - base::TimeTicks()).InMillisecondsF();
+ (gfx::FrameTime::Now() - base::TimeTicks()).InMillisecondsF();
top_controls_animation_->AddKeyframe(
FloatKeyframe::Create(start_time, controls_top_offset_,
scoped_ptr<TimingFunction>()));
diff --git a/cc/input/top_controls_manager_unittest.cc b/cc/input/top_controls_manager_unittest.cc
index 799f018..74687ad 100644
--- a/cc/input/top_controls_manager_unittest.cc
+++ b/cc/input/top_controls_manager_unittest.cc
@@ -12,6 +12,7 @@
#include "cc/test/fake_layer_tree_host_impl.h"
#include "cc/trees/layer_tree_impl.h"
#include "testing/gtest/include/gtest/gtest.h"
+#include "ui/gfx/frame_time.h"
#include "ui/gfx/vector2d_f.h"
namespace cc {
@@ -131,7 +132,7 @@ TEST(TopControlsManagerTest, PartialShownHideAnimation) {
EXPECT_TRUE(manager->animation());
- base::TimeTicks time = base::TimeTicks::Now();
+ base::TimeTicks time = gfx::FrameTime::Now();
float previous_offset = manager->controls_top_offset();
while (manager->animation()) {
time = base::TimeDelta::FromMicroseconds(100) + time;
@@ -161,7 +162,7 @@ TEST(TopControlsManagerTest, PartialShownShowAnimation) {
EXPECT_TRUE(manager->animation());
- base::TimeTicks time = base::TimeTicks::Now();
+ base::TimeTicks time = gfx::FrameTime::Now();
float previous_offset = manager->controls_top_offset();
while (manager->animation()) {
time = base::TimeDelta::FromMicroseconds(100) + time;
@@ -187,7 +188,7 @@ TEST(TopControlsManagerTest, PartialHiddenWithAmbiguousThresholdShows) {
manager->ScrollEnd();
EXPECT_TRUE(manager->animation());
- base::TimeTicks time = base::TimeTicks::Now();
+ base::TimeTicks time = gfx::FrameTime::Now();
float previous_offset = manager->controls_top_offset();
while (manager->animation()) {
time = base::TimeDelta::FromMicroseconds(100) + time;
@@ -213,7 +214,7 @@ TEST(TopControlsManagerTest, PartialHiddenWithAmbiguousThresholdHides) {
manager->ScrollEnd();
EXPECT_TRUE(manager->animation());
- base::TimeTicks time = base::TimeTicks::Now();
+ base::TimeTicks time = gfx::FrameTime::Now();
float previous_offset = manager->controls_top_offset();
while (manager->animation()) {
time = base::TimeDelta::FromMicroseconds(100) + time;
@@ -243,7 +244,7 @@ TEST(TopControlsManagerTest, PartialShownWithAmbiguousThresholdHides) {
manager->ScrollEnd();
EXPECT_TRUE(manager->animation());
- base::TimeTicks time = base::TimeTicks::Now();
+ base::TimeTicks time = gfx::FrameTime::Now();
float previous_offset = manager->controls_top_offset();
while (manager->animation()) {
time = base::TimeDelta::FromMicroseconds(100) + time;
@@ -273,7 +274,7 @@ TEST(TopControlsManagerTest, PartialShownWithAmbiguousThresholdShows) {
manager->ScrollEnd();
EXPECT_TRUE(manager->animation());
- base::TimeTicks time = base::TimeTicks::Now();
+ base::TimeTicks time = gfx::FrameTime::Now();
float previous_offset = manager->controls_top_offset();
while (manager->animation()) {
time = base::TimeDelta::FromMicroseconds(100) + time;
diff --git a/cc/layers/delegated_renderer_layer_impl_unittest.cc b/cc/layers/delegated_renderer_layer_impl_unittest.cc
index 58fa366..a6bb327 100644
--- a/cc/layers/delegated_renderer_layer_impl_unittest.cc
+++ b/cc/layers/delegated_renderer_layer_impl_unittest.cc
@@ -25,6 +25,7 @@
#include "cc/trees/layer_tree_impl.h"
#include "cc/trees/single_thread_proxy.h"
#include "testing/gtest/include/gtest/gtest.h"
+#include "ui/gfx/frame_time.h"
#include "ui/gfx/transform.h"
namespace cc {
@@ -165,7 +166,7 @@ TEST_F(DelegatedRendererLayerImplTestSimple, AddsContributingRenderPasses) {
EXPECT_EQ(gfx::Rect(7, 7, 7, 7).ToString(),
frame.render_passes[2]->output_rect.ToString());
- host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
+ host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
host_impl_->DidDrawAllLayers(frame);
}
@@ -201,7 +202,7 @@ TEST_F(DelegatedRendererLayerImplTestSimple,
EXPECT_EQ(gfx::Rect(0, 0, 6, 6).ToString(),
frame.render_passes[1]->quad_list[0]->rect.ToString());
- host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
+ host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
host_impl_->DidDrawAllLayers(frame);
}
@@ -228,7 +229,7 @@ TEST_F(DelegatedRendererLayerImplTestSimple, AddsQuadsToTargetRenderPass) {
EXPECT_EQ(gfx::Rect(0, 0, 15, 15).ToString(),
frame.render_passes[3]->quad_list[1]->rect.ToString());
- host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
+ host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
host_impl_->DidDrawAllLayers(frame);
}
@@ -262,7 +263,7 @@ TEST_F(DelegatedRendererLayerImplTestSimple,
EXPECT_TRANSFORMATION_MATRIX_EQ(
gfx::Transform(), frame.render_passes[1]->quad_list[0]->quadTransform());
- host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
+ host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
host_impl_->DidDrawAllLayers(frame);
}
@@ -274,7 +275,7 @@ TEST_F(DelegatedRendererLayerImplTestSimple, DoesNotOwnARenderSurface) {
// has no need to be a RenderSurface for the quads it carries.
EXPECT_FALSE(delegated_renderer_layer_->render_surface());
- host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
+ host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
host_impl_->DidDrawAllLayers(frame);
}
@@ -289,7 +290,7 @@ TEST_F(DelegatedRendererLayerImplTestSimple, DoesOwnARenderSurfaceForOpacity) {
// render surface.
EXPECT_TRUE(delegated_renderer_layer_->render_surface());
- host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
+ host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
host_impl_->DidDrawAllLayers(frame);
}
@@ -307,7 +308,7 @@ TEST_F(DelegatedRendererLayerImplTestSimple,
// render surface.
EXPECT_TRUE(delegated_renderer_layer_->render_surface());
- host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
+ host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
host_impl_->DidDrawAllLayers(frame);
}
@@ -354,7 +355,7 @@ TEST_F(DelegatedRendererLayerImplTestOwnSurface, AddsRenderPasses) {
EXPECT_EQ(gfx::Rect(7, 7, 7, 7).ToString(),
frame.render_passes[2]->output_rect.ToString());
- host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
+ host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
host_impl_->DidDrawAllLayers(frame);
}
@@ -391,7 +392,7 @@ TEST_F(DelegatedRendererLayerImplTestOwnSurface,
EXPECT_EQ(gfx::Rect(0, 0, 6, 6).ToString(),
frame.render_passes[1]->quad_list[0]->rect.ToString());
- host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
+ host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
host_impl_->DidDrawAllLayers(frame);
}
@@ -416,7 +417,7 @@ TEST_F(DelegatedRendererLayerImplTestOwnSurface, AddsQuadsToTargetRenderPass) {
EXPECT_EQ(gfx::Rect(7, 7, 7, 7).ToString(),
frame.render_passes[3]->quad_list[0]->rect.ToString());
- host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
+ host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
host_impl_->DidDrawAllLayers(frame);
}
@@ -448,7 +449,7 @@ TEST_F(DelegatedRendererLayerImplTestOwnSurface,
EXPECT_TRANSFORMATION_MATRIX_EQ(
gfx::Transform(), frame.render_passes[1]->quad_list[0]->quadTransform());
- host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
+ host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
host_impl_->DidDrawAllLayers(frame);
}
@@ -682,7 +683,7 @@ TEST_F(DelegatedRendererLayerImplTestTransform, QuadsUnclipped_NoSurface) {
expected,
contrib_delegated_shared_quad_state->content_to_target_transform);
- host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
+ host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
host_impl_->DidDrawAllLayers(frame);
}
@@ -745,7 +746,7 @@ TEST_F(DelegatedRendererLayerImplTestTransform, QuadsClipped_NoSurface) {
expected,
contrib_delegated_shared_quad_state->content_to_target_transform);
- host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
+ host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
host_impl_->DidDrawAllLayers(frame);
}
@@ -801,7 +802,7 @@ TEST_F(DelegatedRendererLayerImplTestTransform, QuadsUnclipped_Surface) {
expected,
contrib_delegated_shared_quad_state->content_to_target_transform);
- host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
+ host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
host_impl_->DidDrawAllLayers(frame);
}
@@ -856,7 +857,7 @@ TEST_F(DelegatedRendererLayerImplTestTransform, QuadsClipped_Surface) {
expected,
contrib_delegated_shared_quad_state->content_to_target_transform);
- host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
+ host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
host_impl_->DidDrawAllLayers(frame);
}
@@ -1032,7 +1033,7 @@ TEST_F(DelegatedRendererLayerImplTestClip,
// Quads are clipped to the delegated renderer layer.
EXPECT_TRUE(root_delegated_shared_quad_state->is_clipped);
- host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
+ host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
host_impl_->DidDrawAllLayers(frame);
}
@@ -1061,7 +1062,7 @@ TEST_F(DelegatedRendererLayerImplTestClip,
// Quads came with a clip rect.
EXPECT_TRUE(root_delegated_shared_quad_state->is_clipped);
- host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
+ host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
host_impl_->DidDrawAllLayers(frame);
}
@@ -1091,7 +1092,7 @@ TEST_F(DelegatedRendererLayerImplTestClip,
// Quads are clipped to the delegated renderer layer.
EXPECT_TRUE(root_delegated_shared_quad_state->is_clipped);
- host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
+ host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
host_impl_->DidDrawAllLayers(frame);
}
@@ -1120,7 +1121,7 @@ TEST_F(DelegatedRendererLayerImplTestClip,
// Quads came with a clip rect.
EXPECT_TRUE(root_delegated_shared_quad_state->is_clipped);
- host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
+ host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
host_impl_->DidDrawAllLayers(frame);
}
@@ -1149,7 +1150,7 @@ TEST_F(DelegatedRendererLayerImplTestClip,
// clip rect is ignored, and they are not set as clipped.
EXPECT_FALSE(root_delegated_shared_quad_state->is_clipped);
- host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
+ host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
host_impl_->DidDrawAllLayers(frame);
}
@@ -1179,7 +1180,7 @@ TEST_F(DelegatedRendererLayerImplTestClip,
// Quads came with a clip rect.
EXPECT_TRUE(root_delegated_shared_quad_state->is_clipped);
- host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
+ host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
host_impl_->DidDrawAllLayers(frame);
}
@@ -1208,7 +1209,7 @@ TEST_F(DelegatedRendererLayerImplTestClip,
// clip rect is ignored, and they are not set as clipped.
EXPECT_FALSE(root_delegated_shared_quad_state->is_clipped);
- host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
+ host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
host_impl_->DidDrawAllLayers(frame);
}
@@ -1239,7 +1240,7 @@ TEST_F(DelegatedRendererLayerImplTestClip, QuadsClipped_LayerClipped_Surface) {
// Quads came with a clip rect.
EXPECT_TRUE(root_delegated_shared_quad_state->is_clipped);
- host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
+ host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
host_impl_->DidDrawAllLayers(frame);
}
@@ -1292,7 +1293,7 @@ TEST_F(DelegatedRendererLayerImplTest, InvalidRenderPassDrawQuad) {
EXPECT_EQ(DrawQuad::SOLID_COLOR,
frame.render_passes[0]->quad_list[0]->material);
- host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
+ host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
host_impl_->DidDrawAllLayers(frame);
}
diff --git a/cc/output/begin_frame_args.cc b/cc/output/begin_frame_args.cc
index d7da76c..92901af 100644
--- a/cc/output/begin_frame_args.cc
+++ b/cc/output/begin_frame_args.cc
@@ -3,6 +3,7 @@
// found in the LICENSE file.
#include "cc/output/begin_frame_args.h"
+#include "ui/gfx/frame_time.h"
namespace cc {
@@ -29,20 +30,20 @@ BeginFrameArgs BeginFrameArgs::Create(base::TimeTicks frame_time,
BeginFrameArgs BeginFrameArgs::CreateForSynchronousCompositor() {
// For WebView/SynchronousCompositor, we always want to draw immediately,
// so we set the deadline to 0 and guess that the interval is 16 milliseconds.
- return BeginFrameArgs(base::TimeTicks::Now(),
+ return BeginFrameArgs(gfx::FrameTime::Now(),
base::TimeTicks(),
DefaultInterval());
}
BeginFrameArgs BeginFrameArgs::CreateForTesting() {
- base::TimeTicks now = base::TimeTicks::Now();
+ base::TimeTicks now = gfx::FrameTime::Now();
return BeginFrameArgs(now,
now + (DefaultInterval() / 2),
DefaultInterval());
}
BeginFrameArgs BeginFrameArgs::CreateExpiredForTesting() {
- base::TimeTicks now = base::TimeTicks::Now();
+ base::TimeTicks now = gfx::FrameTime::Now();
return BeginFrameArgs(now,
now - DefaultInterval(),
DefaultInterval());
diff --git a/cc/output/output_surface.cc b/cc/output/output_surface.cc
index 774173a..002a44a 100644
--- a/cc/output/output_surface.cc
+++ b/cc/output/output_surface.cc
@@ -25,6 +25,7 @@
#include "third_party/WebKit/public/platform/WebGraphicsContext3D.h"
#include "third_party/khronos/GLES2/gl2.h"
#include "third_party/khronos/GLES2/gl2ext.h"
+#include "ui/gfx/frame_time.h"
#include "ui/gfx/rect.h"
#include "ui/gfx/size.h"
@@ -95,9 +96,12 @@ void OutputSurface::InitializeBeginImplFrameEmulation(
bool throttle_frame_production,
base::TimeDelta interval) {
if (throttle_frame_production) {
- frame_rate_controller_.reset(
- new FrameRateController(
- DelayBasedTimeSource::Create(interval, task_runner)));
+ scoped_refptr<DelayBasedTimeSource> time_source;
+ if (gfx::FrameTime::TimestampsAreHighRes())
+ time_source = DelayBasedTimeSourceHighRes::Create(interval, task_runner);
+ else
+ time_source = DelayBasedTimeSource::Create(interval, task_runner);
+ frame_rate_controller_.reset(new FrameRateController(time_source));
} else {
frame_rate_controller_.reset(new FrameRateController(task_runner));
}
@@ -200,7 +204,7 @@ void OutputSurface::PostCheckForRetroactiveBeginImplFrame() {
void OutputSurface::CheckForRetroactiveBeginImplFrame() {
TRACE_EVENT0("cc", "OutputSurface::CheckForRetroactiveBeginImplFrame");
check_for_retroactive_begin_impl_frame_pending_ = false;
- if (base::TimeTicks::Now() < RetroactiveBeginImplFrameDeadline())
+ if (gfx::FrameTime::Now() < RetroactiveBeginImplFrameDeadline())
BeginImplFrame(skipped_begin_impl_frame_args_);
}
diff --git a/cc/output/output_surface_unittest.cc b/cc/output/output_surface_unittest.cc
index bf18ada..64ed874 100644
--- a/cc/output/output_surface_unittest.cc
+++ b/cc/output/output_surface_unittest.cc
@@ -15,6 +15,7 @@
#include "cc/test/scheduler_test_common.h"
#include "gpu/GLES2/gl2extchromium.h"
#include "testing/gtest/include/gtest/gtest.h"
+#include "ui/gfx/frame_time.h"
namespace cc {
namespace {
@@ -386,7 +387,7 @@ TEST(OutputSurfaceTest,
// We need to subtract an epsilon from Now() because some platforms have
// a slow clock.
output_surface.OnVSyncParametersChangedForTesting(
- base::TimeTicks::Now() - base::TimeDelta::FromSeconds(1), big_interval);
+ gfx::FrameTime::Now() - base::TimeDelta::FromSeconds(1), big_interval);
output_surface.SetMaxFramesPending(2);
output_surface.EnableRetroactiveBeginImplFrameDeadline(
diff --git a/cc/resources/resource_update_controller.cc b/cc/resources/resource_update_controller.cc
index 3114d1e..59c536b 100644
--- a/cc/resources/resource_update_controller.cc
+++ b/cc/resources/resource_update_controller.cc
@@ -9,6 +9,7 @@
#include "base/single_thread_task_runner.h"
#include "cc/resources/prioritized_resource.h"
#include "cc/resources/resource_provider.h"
+#include "ui/gfx/frame_time.h"
namespace {
@@ -113,7 +114,7 @@ void ResourceUpdateController::OnTimerFired() {
}
base::TimeTicks ResourceUpdateController::Now() const {
- return base::TimeTicks::Now();
+ return gfx::FrameTime::Now();
}
base::TimeDelta ResourceUpdateController::UpdateMoreTexturesTime() const {
diff --git a/cc/scheduler/delay_based_time_source.cc b/cc/scheduler/delay_based_time_source.cc
index d150c71..00515b7 100644
--- a/cc/scheduler/delay_based_time_source.cc
+++ b/cc/scheduler/delay_based_time_source.cc
@@ -33,6 +33,27 @@ static const double kPhaseChangeThreshold = 0.25;
} // namespace
+// The following methods correspond to the DelayBasedTimeSource that uses
+// the base::TimeTicks::HighResNow as the timebase.
+scoped_refptr<DelayBasedTimeSourceHighRes> DelayBasedTimeSourceHighRes::Create(
+ base::TimeDelta interval,
+ base::SingleThreadTaskRunner* task_runner) {
+ return make_scoped_refptr(
+ new DelayBasedTimeSourceHighRes(interval, task_runner));
+}
+
+DelayBasedTimeSourceHighRes::DelayBasedTimeSourceHighRes(
+ base::TimeDelta interval, base::SingleThreadTaskRunner* task_runner)
+ : DelayBasedTimeSource(interval, task_runner) {}
+
+DelayBasedTimeSourceHighRes::~DelayBasedTimeSourceHighRes() {}
+
+base::TimeTicks DelayBasedTimeSourceHighRes::Now() const {
+ return base::TimeTicks::HighResNow();
+}
+
+// The following methods correspond to the DelayBasedTimeSource that uses
+// the base::TimeTicks::Now as the timebase.
scoped_refptr<DelayBasedTimeSource> DelayBasedTimeSource::Create(
base::TimeDelta interval,
base::SingleThreadTaskRunner* task_runner) {
diff --git a/cc/scheduler/delay_based_time_source.h b/cc/scheduler/delay_based_time_source.h
index 55aac5a..ddb89da 100644
--- a/cc/scheduler/delay_based_time_source.h
+++ b/cc/scheduler/delay_based_time_source.h
@@ -15,7 +15,7 @@ namespace cc {
// This timer implements a time source that achieves the specified interval
// in face of millisecond-precision delayed callbacks and random queueing
-// delays.
+// delays. DelayBasedTimeSource uses base::TimeTicks::Now as its timebase.
class CC_EXPORT DelayBasedTimeSource : public TimeSource {
public:
static scoped_refptr<DelayBasedTimeSource> Create(
@@ -73,6 +73,23 @@ class CC_EXPORT DelayBasedTimeSource : public TimeSource {
DISALLOW_COPY_AND_ASSIGN(DelayBasedTimeSource);
};
+// DelayBasedTimeSource uses base::TimeTicks::HighResNow as its timebase.
+class DelayBasedTimeSourceHighRes : public DelayBasedTimeSource {
+ public:
+ static scoped_refptr<DelayBasedTimeSourceHighRes> Create(
+ base::TimeDelta interval, base::SingleThreadTaskRunner* task_runner);
+
+ virtual base::TimeTicks Now() const OVERRIDE;
+
+ protected:
+ DelayBasedTimeSourceHighRes(base::TimeDelta interval,
+ base::SingleThreadTaskRunner* task_runner);
+ virtual ~DelayBasedTimeSourceHighRes();
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(DelayBasedTimeSourceHighRes);
+};
+
} // namespace cc
#endif // CC_SCHEDULER_DELAY_BASED_TIME_SOURCE_H_
diff --git a/cc/scheduler/frame_rate_controller.cc b/cc/scheduler/frame_rate_controller.cc
index 47c27ed..2729748 100644
--- a/cc/scheduler/frame_rate_controller.cc
+++ b/cc/scheduler/frame_rate_controller.cc
@@ -11,6 +11,7 @@
#include "base/single_thread_task_runner.h"
#include "cc/scheduler/delay_based_time_source.h"
#include "cc/scheduler/time_source.h"
+#include "ui/gfx/frame_time.h"
namespace cc {
@@ -165,7 +166,7 @@ base::TimeTicks FrameRateController::LastTickTime() {
if (is_time_source_throttling_)
return time_source_->LastTickTime();
- return base::TimeTicks::Now();
+ return gfx::FrameTime::Now();
}
} // namespace cc
diff --git a/cc/scheduler/scheduler.cc b/cc/scheduler/scheduler.cc
index bedb207..93b9131 100644
--- a/cc/scheduler/scheduler.cc
+++ b/cc/scheduler/scheduler.cc
@@ -9,6 +9,7 @@
#include "base/debug/trace_event.h"
#include "base/logging.h"
#include "cc/debug/traced_value.h"
+#include "ui/gfx/frame_time.h"
namespace cc {
@@ -123,7 +124,7 @@ base::TimeTicks Scheduler::AnticipatedDrawTime() {
last_begin_impl_frame_args_.interval <= base::TimeDelta())
return base::TimeTicks();
- base::TimeTicks now = base::TimeTicks::Now();
+ base::TimeTicks now = gfx::FrameTime::Now();
base::TimeTicks timebase = std::max(last_begin_impl_frame_args_.frame_time,
last_begin_impl_frame_args_.deadline);
int64 intervals =
diff --git a/cc/scheduler/scheduler_state_machine.cc b/cc/scheduler/scheduler_state_machine.cc
index 0e86382..0fd0f57 100644
--- a/cc/scheduler/scheduler_state_machine.cc
+++ b/cc/scheduler/scheduler_state_machine.cc
@@ -9,6 +9,7 @@
#include "base/logging.h"
#include "base/strings/stringprintf.h"
#include "base/values.h"
+#include "ui/gfx/frame_time.h"
namespace cc {
@@ -193,7 +194,7 @@ scoped_ptr<base::Value> SchedulerStateMachine::AsValue() const {
state->Set("major_state", major_state.release());
scoped_ptr<base::DictionaryValue> timestamps_state(new base::DictionaryValue);
- base::TimeTicks now = base::TimeTicks::Now();
+ base::TimeTicks now = gfx::FrameTime::Now();
timestamps_state->SetDouble(
"0_interval",
last_begin_impl_frame_args_.interval.InMicroseconds() / 1000.0L);
diff --git a/cc/test/layer_tree_test.cc b/cc/test/layer_tree_test.cc
index d80c845..9ca0bbd 100644
--- a/cc/test/layer_tree_test.cc
+++ b/cc/test/layer_tree_test.cc
@@ -23,6 +23,7 @@
#include "cc/trees/layer_tree_host_impl.h"
#include "cc/trees/single_thread_proxy.h"
#include "testing/gmock/include/gmock/gmock.h"
+#include "ui/gfx/frame_time.h"
#include "ui/gfx/size_conversions.h"
namespace cc {
@@ -591,7 +592,7 @@ void LayerTreeTest::DispatchComposite() {
}
schedule_when_set_visible_true_ = false;
- base::TimeTicks now = base::TimeTicks::Now();
+ base::TimeTicks now = gfx::FrameTime::Now();
layer_tree_host_->Composite(now);
}
diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc
index 450099e..aa03b20 100644
--- a/cc/trees/layer_tree_host_impl.cc
+++ b/cc/trees/layer_tree_host_impl.cc
@@ -56,6 +56,7 @@
#include "cc/trees/quad_culler.h"
#include "cc/trees/single_thread_proxy.h"
#include "cc/trees/tree_synchronizer.h"
+#include "ui/gfx/frame_time.h"
#include "ui/gfx/size_conversions.h"
#include "ui/gfx/vector2d_conversions.h"
@@ -2685,7 +2686,7 @@ base::Time LayerTreeHostImpl::CurrentFrameTime() {
}
base::TimeTicks LayerTreeHostImpl::CurrentPhysicalTimeTicks() const {
- return base::TimeTicks::Now();
+ return gfx::FrameTime::Now();
}
scoped_ptr<base::Value> LayerTreeHostImpl::AsValueWithFrame(
diff --git a/cc/trees/layer_tree_host_impl_unittest.cc b/cc/trees/layer_tree_host_impl_unittest.cc
index f96c201..a35191a 100644
--- a/cc/trees/layer_tree_host_impl_unittest.cc
+++ b/cc/trees/layer_tree_host_impl_unittest.cc
@@ -53,6 +53,7 @@
#include "media/base/media.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
+#include "ui/gfx/frame_time.h"
#include "ui/gfx/rect_conversions.h"
#include "ui/gfx/size_conversions.h"
#include "ui/gfx/vector2d_conversions.h"
@@ -267,7 +268,7 @@ class LayerTreeHostImplTest : public testing::Test,
void DrawFrame() {
LayerTreeHostImpl::FrameData frame;
EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect()));
- host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
+ host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
host_impl_->DidDrawAllLayers(frame);
}
@@ -1207,7 +1208,7 @@ TEST_F(LayerTreeHostImplTest, ScrollbarLinearFadeScheduling) {
host_impl_->active_tree()->DidBecomeActive();
InitializeRendererAndDrawFrame();
- base::TimeTicks fake_now = base::TimeTicks::Now();
+ base::TimeTicks fake_now = gfx::FrameTime::Now();
host_impl_override_time->SetCurrentPhysicalTimeTicksForTest(fake_now);
// If no scroll happened recently, StartScrollbarAnimation should have no
@@ -1506,7 +1507,7 @@ TEST_F(LayerTreeHostImplTest, WillDrawReturningFalseDoesNotCall) {
{
LayerTreeHostImpl::FrameData frame;
EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect(10, 10)));
- host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
+ host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
host_impl_->DidDrawAllLayers(frame);
EXPECT_TRUE(layer->will_draw_called());
@@ -1521,7 +1522,7 @@ TEST_F(LayerTreeHostImplTest, WillDrawReturningFalseDoesNotCall) {
layer->ClearDidDrawCheck();
EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect(10, 10)));
- host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
+ host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
host_impl_->DidDrawAllLayers(frame);
EXPECT_TRUE(layer->will_draw_called());
@@ -1553,7 +1554,7 @@ TEST_F(LayerTreeHostImplTest, DidDrawNotCalledOnHiddenLayer) {
EXPECT_FALSE(layer->did_draw_called());
EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect()));
- host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
+ host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
host_impl_->DidDrawAllLayers(frame);
EXPECT_FALSE(layer->will_draw_called());
@@ -1568,7 +1569,7 @@ TEST_F(LayerTreeHostImplTest, DidDrawNotCalledOnHiddenLayer) {
EXPECT_FALSE(layer->did_draw_called());
EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect()));
- host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
+ host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
host_impl_->DidDrawAllLayers(frame);
EXPECT_TRUE(layer->will_draw_called());
@@ -1607,7 +1608,7 @@ TEST_F(LayerTreeHostImplTest, WillDrawNotCalledOnOccludedLayer) {
EXPECT_FALSE(top_layer->did_draw_called());
EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect()));
- host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
+ host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
host_impl_->DidDrawAllLayers(frame);
EXPECT_FALSE(occluded_layer->will_draw_called());
@@ -1639,7 +1640,7 @@ TEST_F(LayerTreeHostImplTest, DidDrawCalledOnAllLayers) {
LayerTreeHostImpl::FrameData frame;
EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect()));
- host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
+ host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
host_impl_->DidDrawAllLayers(frame);
EXPECT_TRUE(root->did_draw_called());
@@ -1712,7 +1713,7 @@ TEST_F(LayerTreeHostImplTest, PrepareToDrawFailsWhenAnimationUsesCheckerboard) {
LayerTreeHostImpl::FrameData frame;
EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect()));
- host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
+ host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
host_impl_->DidDrawAllLayers(frame);
// When a texture is missing and we're not animating, we draw as usual with
@@ -1730,7 +1731,7 @@ TEST_F(LayerTreeHostImplTest, PrepareToDrawFailsWhenAnimationUsesCheckerboard) {
host_impl_->resource_provider()));
EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect()));
- host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
+ host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
host_impl_->DidDrawAllLayers(frame);
// When a texture is missing and we're animating, we don't want to draw
@@ -1748,7 +1749,7 @@ TEST_F(LayerTreeHostImplTest, PrepareToDrawFailsWhenAnimationUsesCheckerboard) {
host_impl_->resource_provider()));
EXPECT_FALSE(host_impl_->PrepareToDraw(&frame, gfx::Rect()));
- host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
+ host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
host_impl_->DidDrawAllLayers(frame);
// When the layer skips draw and we're animating, we still draw the frame.
@@ -1765,7 +1766,7 @@ TEST_F(LayerTreeHostImplTest, PrepareToDrawFailsWhenAnimationUsesCheckerboard) {
host_impl_->resource_provider()));
EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect()));
- host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
+ host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
host_impl_->DidDrawAllLayers(frame);
}
@@ -2059,7 +2060,7 @@ TEST_F(LayerTreeHostImplTest, PageScaleDeltaAppliedToRootScrollLayerOnly) {
// the page scale delta on the root layer is applied hierarchically.
LayerTreeHostImpl::FrameData frame;
EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect()));
- host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
+ host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
host_impl_->DidDrawAllLayers(frame);
EXPECT_EQ(1.f, root->draw_transform().matrix().getDouble(0, 0));
@@ -2894,7 +2895,7 @@ TEST_F(LayerTreeHostImplTest, BlendingOffWhenDrawingOpaqueLayers) {
layer1->SetExpectation(false, false);
layer1->set_update_rect(gfx::RectF(layer1->content_bounds()));
EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect()));
- host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
+ host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
EXPECT_TRUE(layer1->quads_appended());
host_impl_->DidDrawAllLayers(frame);
@@ -2903,7 +2904,7 @@ TEST_F(LayerTreeHostImplTest, BlendingOffWhenDrawingOpaqueLayers) {
layer1->SetExpectation(true, false);
layer1->set_update_rect(gfx::RectF(layer1->content_bounds()));
EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect()));
- host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
+ host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
EXPECT_TRUE(layer1->quads_appended());
host_impl_->DidDrawAllLayers(frame);
@@ -2913,7 +2914,7 @@ TEST_F(LayerTreeHostImplTest, BlendingOffWhenDrawingOpaqueLayers) {
layer1->SetExpectation(true, false);
layer1->set_update_rect(gfx::RectF(layer1->content_bounds()));
EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect()));
- host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
+ host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
EXPECT_TRUE(layer1->quads_appended());
host_impl_->DidDrawAllLayers(frame);
@@ -2923,7 +2924,7 @@ TEST_F(LayerTreeHostImplTest, BlendingOffWhenDrawingOpaqueLayers) {
layer1->SetExpectation(true, false);
layer1->set_update_rect(gfx::RectF(layer1->content_bounds()));
EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect()));
- host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
+ host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
EXPECT_TRUE(layer1->quads_appended());
host_impl_->DidDrawAllLayers(frame);
@@ -2945,7 +2946,7 @@ TEST_F(LayerTreeHostImplTest, BlendingOffWhenDrawingOpaqueLayers) {
layer2->SetExpectation(false, false);
layer2->set_update_rect(gfx::RectF(layer1->content_bounds()));
EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect()));
- host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
+ host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
EXPECT_TRUE(layer1->quads_appended());
EXPECT_TRUE(layer2->quads_appended());
host_impl_->DidDrawAllLayers(frame);
@@ -2958,7 +2959,7 @@ TEST_F(LayerTreeHostImplTest, BlendingOffWhenDrawingOpaqueLayers) {
layer2->SetExpectation(false, false);
layer2->set_update_rect(gfx::RectF(layer1->content_bounds()));
EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect()));
- host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
+ host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
EXPECT_TRUE(layer1->quads_appended());
EXPECT_TRUE(layer2->quads_appended());
host_impl_->DidDrawAllLayers(frame);
@@ -2972,7 +2973,7 @@ TEST_F(LayerTreeHostImplTest, BlendingOffWhenDrawingOpaqueLayers) {
layer2->SetExpectation(false, false);
layer2->set_update_rect(gfx::RectF(layer1->content_bounds()));
EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect()));
- host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
+ host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
EXPECT_TRUE(layer1->quads_appended());
EXPECT_TRUE(layer2->quads_appended());
host_impl_->DidDrawAllLayers(frame);
@@ -2989,7 +2990,7 @@ TEST_F(LayerTreeHostImplTest, BlendingOffWhenDrawingOpaqueLayers) {
layer2->SetExpectation(false, false);
layer2->set_update_rect(gfx::RectF(layer1->content_bounds()));
EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect()));
- host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
+ host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
EXPECT_TRUE(layer1->quads_appended());
EXPECT_TRUE(layer2->quads_appended());
host_impl_->DidDrawAllLayers(frame);
@@ -3005,7 +3006,7 @@ TEST_F(LayerTreeHostImplTest, BlendingOffWhenDrawingOpaqueLayers) {
layer2->SetExpectation(true, false);
layer2->set_update_rect(gfx::RectF(layer1->content_bounds()));
EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect()));
- host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
+ host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
EXPECT_TRUE(layer1->quads_appended());
EXPECT_TRUE(layer2->quads_appended());
host_impl_->DidDrawAllLayers(frame);
@@ -3020,7 +3021,7 @@ TEST_F(LayerTreeHostImplTest, BlendingOffWhenDrawingOpaqueLayers) {
layer2->SetExpectation(true, false);
layer2->set_update_rect(gfx::RectF(layer1->content_bounds()));
EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect()));
- host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
+ host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
EXPECT_TRUE(layer1->quads_appended());
EXPECT_TRUE(layer2->quads_appended());
host_impl_->DidDrawAllLayers(frame);
@@ -3036,7 +3037,7 @@ TEST_F(LayerTreeHostImplTest, BlendingOffWhenDrawingOpaqueLayers) {
layer2->SetExpectation(false, false);
layer2->set_update_rect(gfx::RectF(layer1->content_bounds()));
EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect()));
- host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
+ host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
EXPECT_TRUE(layer1->quads_appended());
EXPECT_TRUE(layer2->quads_appended());
host_impl_->DidDrawAllLayers(frame);
@@ -3049,7 +3050,7 @@ TEST_F(LayerTreeHostImplTest, BlendingOffWhenDrawingOpaqueLayers) {
layer1->SetExpectation(true, false);
layer1->set_update_rect(gfx::RectF(layer1->content_bounds()));
EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect()));
- host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
+ host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
EXPECT_TRUE(layer1->quads_appended());
host_impl_->DidDrawAllLayers(frame);
@@ -3061,7 +3062,7 @@ TEST_F(LayerTreeHostImplTest, BlendingOffWhenDrawingOpaqueLayers) {
layer1->SetExpectation(true, false);
layer1->set_update_rect(gfx::RectF(layer1->content_bounds()));
EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect()));
- host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
+ host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
EXPECT_TRUE(layer1->quads_appended());
host_impl_->DidDrawAllLayers(frame);
@@ -3073,7 +3074,7 @@ TEST_F(LayerTreeHostImplTest, BlendingOffWhenDrawingOpaqueLayers) {
layer1->SetExpectation(true, false);
layer1->set_update_rect(gfx::RectF(layer1->content_bounds()));
EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect()));
- host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
+ host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
EXPECT_TRUE(layer1->quads_appended());
host_impl_->DidDrawAllLayers(frame);
@@ -3086,7 +3087,7 @@ TEST_F(LayerTreeHostImplTest, BlendingOffWhenDrawingOpaqueLayers) {
layer1->SetExpectation(false, false);
layer1->set_update_rect(gfx::RectF(layer1->content_bounds()));
EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect()));
- host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
+ host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
EXPECT_TRUE(layer1->quads_appended());
host_impl_->DidDrawAllLayers(frame);
}
@@ -3445,7 +3446,7 @@ TEST_F(LayerTreeHostImplTest, ReshapeNotCalledUntilDraw) {
host_impl_->SetViewportSize(gfx::Size(10, 10));
host_impl_->SetDeviceScaleFactor(1.f);
EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect()));
- host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
+ host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
EXPECT_TRUE(reshape_tracker->reshape_called());
EXPECT_EQ(reshape_tracker->last_reshape_width(), 10);
EXPECT_EQ(reshape_tracker->last_reshape_height(), 10);
@@ -3455,7 +3456,7 @@ TEST_F(LayerTreeHostImplTest, ReshapeNotCalledUntilDraw) {
host_impl_->SetViewportSize(gfx::Size(20, 30));
EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect()));
- host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
+ host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
EXPECT_TRUE(reshape_tracker->reshape_called());
EXPECT_EQ(reshape_tracker->last_reshape_width(), 20);
EXPECT_EQ(reshape_tracker->last_reshape_height(), 30);
@@ -3465,7 +3466,7 @@ TEST_F(LayerTreeHostImplTest, ReshapeNotCalledUntilDraw) {
host_impl_->SetDeviceScaleFactor(2.f);
EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect()));
- host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
+ host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
EXPECT_TRUE(reshape_tracker->reshape_called());
EXPECT_EQ(reshape_tracker->last_reshape_width(), 20);
EXPECT_EQ(reshape_tracker->last_reshape_height(), 30);
@@ -3549,7 +3550,7 @@ TEST_F(LayerTreeHostImplTest, PartialSwapReceivesDamageRect) {
// First frame, the entire screen should get swapped.
EXPECT_TRUE(layer_tree_host_impl->PrepareToDraw(&frame, gfx::Rect()));
- layer_tree_host_impl->DrawLayers(&frame, base::TimeTicks::Now());
+ layer_tree_host_impl->DrawLayers(&frame, gfx::FrameTime::Now());
layer_tree_host_impl->DidDrawAllLayers(frame);
layer_tree_host_impl->SwapBuffers(frame);
gfx::Rect actual_swap_rect = swap_tracker->update_rect();
@@ -3567,7 +3568,7 @@ TEST_F(LayerTreeHostImplTest, PartialSwapReceivesDamageRect) {
layer_tree_host_impl->active_tree()->root_layer()->children()[0]->SetPosition(
gfx::PointF());
EXPECT_TRUE(layer_tree_host_impl->PrepareToDraw(&frame, gfx::Rect()));
- layer_tree_host_impl->DrawLayers(&frame, base::TimeTicks::Now());
+ layer_tree_host_impl->DrawLayers(&frame, gfx::FrameTime::Now());
host_impl_->DidDrawAllLayers(frame);
layer_tree_host_impl->SwapBuffers(frame);
actual_swap_rect = swap_tracker->update_rect();
@@ -3587,7 +3588,7 @@ TEST_F(LayerTreeHostImplTest, PartialSwapReceivesDamageRect) {
layer_tree_host_impl->active_tree()->root_layer()->SetBackgroundColor(
SK_ColorBLACK);
EXPECT_TRUE(layer_tree_host_impl->PrepareToDraw(&frame, gfx::Rect()));
- layer_tree_host_impl->DrawLayers(&frame, base::TimeTicks::Now());
+ layer_tree_host_impl->DrawLayers(&frame, gfx::FrameTime::Now());
host_impl_->DidDrawAllLayers(frame);
layer_tree_host_impl->SwapBuffers(frame);
actual_swap_rect = swap_tracker->update_rect();
@@ -3755,7 +3756,7 @@ TEST_F(LayerTreeHostImplTest, NoPartialSwap) {
{
LayerTreeHostImpl::FrameData frame;
EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect()));
- host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
+ host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
host_impl_->DidDrawAllLayers(frame);
}
Mock::VerifyAndClearExpectations(&mock_context);
@@ -3768,7 +3769,7 @@ TEST_F(LayerTreeHostImplTest, NoPartialSwap) {
{
LayerTreeHostImpl::FrameData frame;
EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect()));
- host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
+ host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
host_impl_->DidDrawAllLayers(frame);
}
Mock::VerifyAndClearExpectations(&mock_context);
@@ -3790,7 +3791,7 @@ TEST_F(LayerTreeHostImplTest, PartialSwap) {
{
LayerTreeHostImpl::FrameData frame;
EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect()));
- host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
+ host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
host_impl_->DidDrawAllLayers(frame);
}
Mock::VerifyAndClearExpectations(&mock_context);
@@ -3805,7 +3806,7 @@ TEST_F(LayerTreeHostImplTest, PartialSwap) {
{
LayerTreeHostImpl::FrameData frame;
EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect()));
- host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
+ host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
host_impl_->DidDrawAllLayers(frame);
}
Mock::VerifyAndClearExpectations(&mock_context);
@@ -3919,7 +3920,7 @@ TEST_F(LayerTreeHostImplTest, ContributingLayerEmptyScissorPartialSwap) {
EXPECT_EQ(DrawQuad::RENDER_PASS,
frame.render_passes[1]->quad_list[0]->material);
- my_host_impl->DrawLayers(&frame, base::TimeTicks::Now());
+ my_host_impl->DrawLayers(&frame, gfx::FrameTime::Now());
my_host_impl->DidDrawAllLayers(frame);
}
}
@@ -3940,7 +3941,7 @@ TEST_F(LayerTreeHostImplTest, ContributingLayerEmptyScissorNoPartialSwap) {
EXPECT_EQ(DrawQuad::RENDER_PASS,
frame.render_passes[1]->quad_list[0]->material);
- my_host_impl->DrawLayers(&frame, base::TimeTicks::Now());
+ my_host_impl->DrawLayers(&frame, gfx::FrameTime::Now());
my_host_impl->DidDrawAllLayers(frame);
}
}
@@ -4019,7 +4020,7 @@ TEST_F(LayerTreeHostImplTest, LayersFreeTextures) {
LayerTreeHostImpl::FrameData frame;
EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect()));
- host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
+ host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
host_impl_->DidDrawAllLayers(frame);
host_impl_->SwapBuffers(frame);
@@ -4062,7 +4063,7 @@ TEST_F(LayerTreeHostImplTest, HasTransparentBackground) {
.Times(1);
LayerTreeHostImpl::FrameData frame;
EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect()));
- host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
+ host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
host_impl_->DidDrawAllLayers(frame);
Mock::VerifyAndClearExpectations(&mock_context);
@@ -4070,7 +4071,7 @@ TEST_F(LayerTreeHostImplTest, HasTransparentBackground) {
host_impl_->active_tree()->set_has_transparent_background(true);
host_impl_->SetFullRootLayerDamage();
EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect()));
- host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
+ host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
host_impl_->DidDrawAllLayers(frame);
Mock::VerifyAndClearExpectations(&mock_context);
}
@@ -4157,7 +4158,7 @@ class LayerTreeHostImplTestWithDelegatingRenderer
root_render_pass->quad_list[1]->visible_rect);
}
- host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
+ host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
host_impl_->DidDrawAllLayers(frame);
EXPECT_EQ(expect_to_draw, host_impl_->SwapBuffers(frame));
}
@@ -4297,7 +4298,7 @@ TEST_F(LayerTreeHostImplTest, MaskLayerWithScaling) {
EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(),
render_pass_quad->mask_uv_rect.ToString());
- host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
+ host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
host_impl_->DidDrawAllLayers(frame);
}
@@ -4325,7 +4326,7 @@ TEST_F(LayerTreeHostImplTest, MaskLayerWithScaling) {
EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(),
render_pass_quad->mask_uv_rect.ToString());
- host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
+ host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
host_impl_->DidDrawAllLayers(frame);
}
@@ -4355,7 +4356,7 @@ TEST_F(LayerTreeHostImplTest, MaskLayerWithScaling) {
EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(),
render_pass_quad->mask_uv_rect.ToString());
- host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
+ host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
host_impl_->DidDrawAllLayers(frame);
}
}
@@ -4418,7 +4419,7 @@ TEST_F(LayerTreeHostImplTest, MaskLayerWithDifferentBounds) {
EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(),
render_pass_quad->mask_uv_rect.ToString());
- host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
+ host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
host_impl_->DidDrawAllLayers(frame);
}
@@ -4445,7 +4446,7 @@ TEST_F(LayerTreeHostImplTest, MaskLayerWithDifferentBounds) {
EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(),
render_pass_quad->mask_uv_rect.ToString());
- host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
+ host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
host_impl_->DidDrawAllLayers(frame);
}
@@ -4475,7 +4476,7 @@ TEST_F(LayerTreeHostImplTest, MaskLayerWithDifferentBounds) {
EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(),
render_pass_quad->mask_uv_rect.ToString());
- host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
+ host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
host_impl_->DidDrawAllLayers(frame);
}
@@ -4500,7 +4501,7 @@ TEST_F(LayerTreeHostImplTest, MaskLayerWithDifferentBounds) {
EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(),
render_pass_quad->mask_uv_rect.ToString());
- host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
+ host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
host_impl_->DidDrawAllLayers(frame);
}
}
@@ -4569,7 +4570,7 @@ TEST_F(LayerTreeHostImplTest, ReflectionMaskLayerWithDifferentBounds) {
EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(),
replica_quad->mask_uv_rect.ToString());
- host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
+ host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
host_impl_->DidDrawAllLayers(frame);
}
@@ -4597,7 +4598,7 @@ TEST_F(LayerTreeHostImplTest, ReflectionMaskLayerWithDifferentBounds) {
EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(),
replica_quad->mask_uv_rect.ToString());
- host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
+ host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
host_impl_->DidDrawAllLayers(frame);
}
@@ -4628,7 +4629,7 @@ TEST_F(LayerTreeHostImplTest, ReflectionMaskLayerWithDifferentBounds) {
EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(),
replica_quad->mask_uv_rect.ToString());
- host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
+ host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
host_impl_->DidDrawAllLayers(frame);
}
@@ -4654,7 +4655,7 @@ TEST_F(LayerTreeHostImplTest, ReflectionMaskLayerWithDifferentBounds) {
EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(),
replica_quad->mask_uv_rect.ToString());
- host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
+ host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
host_impl_->DidDrawAllLayers(frame);
}
}
@@ -4745,7 +4746,7 @@ TEST_F(LayerTreeHostImplTest, ReflectionMaskLayerForSurfaceWithUnclippedChild) {
EXPECT_EQ(gfx::RectF(0.f, 0.f, 2.f, 1.f).ToString(),
replica_quad->mask_uv_rect.ToString());
- host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
+ host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
host_impl_->DidDrawAllLayers(frame);
}
@@ -4779,7 +4780,7 @@ TEST_F(LayerTreeHostImplTest, ReflectionMaskLayerForSurfaceWithUnclippedChild) {
EXPECT_EQ(gfx::RectF(-1.f, 0.f, 2.f, 1.f).ToString(),
replica_quad->mask_uv_rect.ToString());
- host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
+ host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
host_impl_->DidDrawAllLayers(frame);
}
}
@@ -4875,7 +4876,7 @@ TEST_F(LayerTreeHostImplTest, MaskLayerForSurfaceWithClippedLayer) {
1.f / 50.f).ToString(),
render_pass_quad->mask_uv_rect.ToString());
- host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
+ host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
host_impl_->DidDrawAllLayers(frame);
}
}
@@ -4948,7 +4949,7 @@ TEST_F(LayerTreeHostImplTest, FarAwayQuadsDontNeedAA) {
quad->quadTransform(), quad, &device_layer_quad, edge);
EXPECT_FALSE(antialiased);
- host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
+ host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
host_impl_->DidDrawAllLayers(frame);
}
@@ -5049,7 +5050,7 @@ TEST_F(LayerTreeHostImplTest,
LayerTreeHostImpl::FrameData frame;
EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect()));
- host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
+ host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
host_impl_->DidDrawAllLayers(frame);
EXPECT_EQ(1u, frame.will_draw_layers.size());
@@ -5333,7 +5334,7 @@ TEST_F(LayerTreeHostImplTest, ShutdownReleasesContext) {
LayerTreeHostImpl::FrameData frame;
EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect()));
- host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
+ host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
host_impl_->DidDrawAllLayers(frame);
// The CopyOutputResult's callback has a ref on the ContextProvider and a
diff --git a/cc/trees/layer_tree_host_unittest.cc b/cc/trees/layer_tree_host_unittest.cc
index 2331427..3b47959 100644
--- a/cc/trees/layer_tree_host_unittest.cc
+++ b/cc/trees/layer_tree_host_unittest.cc
@@ -51,6 +51,7 @@
#include "third_party/khronos/GLES2/gl2.h"
#include "third_party/khronos/GLES2/gl2ext.h"
#include "third_party/skia/include/core/SkPicture.h"
+#include "ui/gfx/frame_time.h"
#include "ui/gfx/point_conversions.h"
#include "ui/gfx/size_conversions.h"
#include "ui/gfx/vector2d_conversions.h"
@@ -1004,10 +1005,9 @@ class LayerTreeHostTestFrameTimeUpdatesAfterDraw : public LayerTreeHostTest {
first_frame_time_ = impl->CurrentFrameTimeTicks();
impl->SetNeedsRedraw();
- // Since base::TimeTicks::Now() uses a low-resolution clock on
- // Windows, we need to make sure that the clock has incremented past
- // first_frame_time_.
- while (first_frame_time_ == base::TimeTicks::Now()) {}
+ // Since we might use a low-resolution clock on Windows, we need to
+ // make sure that the clock has incremented past first_frame_time_.
+ while (first_frame_time_ == gfx::FrameTime::Now()) {}
return;
}
diff --git a/cc/trees/single_thread_proxy.cc b/cc/trees/single_thread_proxy.cc
index 1c58086..d6c503f 100644
--- a/cc/trees/single_thread_proxy.cc
+++ b/cc/trees/single_thread_proxy.cc
@@ -15,6 +15,7 @@
#include "cc/trees/blocking_task_runner.h"
#include "cc/trees/layer_tree_host.h"
#include "cc/trees/layer_tree_impl.h"
+#include "ui/gfx/frame_time.h"
namespace cc {
@@ -59,7 +60,7 @@ bool SingleThreadProxy::CompositeAndReadback(void* pixels, gfx::Rect rect) {
gfx::Rect device_viewport_damage_rect = rect;
LayerTreeHostImpl::FrameData frame;
- if (!CommitAndComposite(base::TimeTicks::Now(),
+ if (!CommitAndComposite(gfx::FrameTime::Now(),
device_viewport_damage_rect,
true, // for_readback
&frame))
diff --git a/cc/trees/thread_proxy.cc b/cc/trees/thread_proxy.cc
index b54078e..9fe5b9e 100644
--- a/cc/trees/thread_proxy.cc
+++ b/cc/trees/thread_proxy.cc
@@ -22,6 +22,7 @@
#include "cc/trees/blocking_task_runner.h"
#include "cc/trees/layer_tree_host.h"
#include "cc/trees/layer_tree_impl.h"
+#include "ui/gfx/frame_time.h"
// Measured in seconds.
const double kSmoothnessTakesPriorityExpirationDelay = 0.25;
@@ -1255,7 +1256,7 @@ base::TimeDelta ThreadProxy::CommitToActivateDurationEstimate() {
void ThreadProxy::PostBeginImplFrameDeadline(const base::Closure& closure,
base::TimeTicks deadline) {
- base::TimeDelta delta = deadline - base::TimeTicks::Now();
+ base::TimeDelta delta = deadline - gfx::FrameTime::Now();
if (delta <= base::TimeDelta())
delta = base::TimeDelta();
Proxy::ImplThreadTaskRunner()->PostDelayedTask(FROM_HERE, closure, delta);