diff options
author | brianderson@chromium.org <brianderson@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-10-25 19:46:46 +0000 |
---|---|---|
committer | brianderson@chromium.org <brianderson@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-10-25 19:46:46 +0000 |
commit | de2cf8caf24f9dff41462b4ed164d18c553b30e3 (patch) | |
tree | 9b7833a432e15c49b8217d529e17cc474c0e47af /cc | |
parent | 406e93caa0d00078548cbbb830767f5cc976e32d (diff) | |
download | chromium_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.cc | 5 | ||||
-rw-r--r-- | cc/input/top_controls_manager_unittest.cc | 13 | ||||
-rw-r--r-- | cc/layers/delegated_renderer_layer_impl_unittest.cc | 49 | ||||
-rw-r--r-- | cc/output/begin_frame_args.cc | 7 | ||||
-rw-r--r-- | cc/output/output_surface.cc | 12 | ||||
-rw-r--r-- | cc/output/output_surface_unittest.cc | 3 | ||||
-rw-r--r-- | cc/resources/resource_update_controller.cc | 3 | ||||
-rw-r--r-- | cc/scheduler/delay_based_time_source.cc | 21 | ||||
-rw-r--r-- | cc/scheduler/delay_based_time_source.h | 19 | ||||
-rw-r--r-- | cc/scheduler/frame_rate_controller.cc | 3 | ||||
-rw-r--r-- | cc/scheduler/scheduler.cc | 3 | ||||
-rw-r--r-- | cc/scheduler/scheduler_state_machine.cc | 3 | ||||
-rw-r--r-- | cc/test/layer_tree_test.cc | 3 | ||||
-rw-r--r-- | cc/trees/layer_tree_host_impl.cc | 3 | ||||
-rw-r--r-- | cc/trees/layer_tree_host_impl_unittest.cc | 123 | ||||
-rw-r--r-- | cc/trees/layer_tree_host_unittest.cc | 8 | ||||
-rw-r--r-- | cc/trees/single_thread_proxy.cc | 3 | ||||
-rw-r--r-- | cc/trees/thread_proxy.cc | 3 |
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); |