diff options
author | enne <enne@chromium.org> | 2014-08-23 14:27:46 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-08-23 21:33:41 +0000 |
commit | 9a3ddb332a5ec5e21a5767b2891ba161cda5a3d0 (patch) | |
tree | f9035ea15d0ae44836b0a89b019e89d18770c935 /ash | |
parent | 145425d17c8351595048b0dff319e8ff284d983f (diff) | |
download | chromium_src-9a3ddb332a5ec5e21a5767b2891ba161cda5a3d0.zip chromium_src-9a3ddb332a5ec5e21a5767b2891ba161cda5a3d0.tar.gz chromium_src-9a3ddb332a5ec5e21a5767b2891ba161cda5a3d0.tar.bz2 |
Stop painting when receiving delegated frame
The SchedulePaintInRect call in DelegatedFrameHost is only there to
eventually notify an observer on the aura::Window that damage has
occurred (for the video detector). Instead, just pass along the
damage to the LayerDelegate API and don't schedule a paint.
R=jbauman@chromium.org
BUG=none
Review URL: https://codereview.chromium.org/464643003
Cr-Commit-Position: refs/heads/master@{#291582}
Diffstat (limited to 'ash')
-rw-r--r-- | ash/wm/boot_splash_screen_chromeos.cc | 3 | ||||
-rw-r--r-- | ash/wm/video_detector.cc | 7 | ||||
-rw-r--r-- | ash/wm/video_detector.h | 2 | ||||
-rw-r--r-- | ash/wm/video_detector_unittest.cc | 38 |
4 files changed, 27 insertions, 23 deletions
diff --git a/ash/wm/boot_splash_screen_chromeos.cc b/ash/wm/boot_splash_screen_chromeos.cc index 34ee5bb..f13ce5e 100644 --- a/ash/wm/boot_splash_screen_chromeos.cc +++ b/ash/wm/boot_splash_screen_chromeos.cc @@ -43,6 +43,9 @@ class BootSplashScreen::CopyHostContentLayerDelegate #endif } + virtual void OnDelegatedFrameDamage( + const gfx::Rect& damage_rect_in_dip) OVERRIDE {} + virtual void OnDeviceScaleFactorChanged(float device_scale_factor) OVERRIDE {} virtual base::Closure PrepareForLayerBoundsChange() OVERRIDE { diff --git a/ash/wm/video_detector.cc b/ash/wm/video_detector.cc index f0a7aaa..816a9c4 100644 --- a/ash/wm/video_detector.cc +++ b/ash/wm/video_detector.cc @@ -84,8 +84,9 @@ void VideoDetector::OnWindowInitialized(aura::Window* window) { observer_manager_.Add(window); } -void VideoDetector::OnWindowPaintScheduled(aura::Window* window, - const gfx::Rect& region) { +void VideoDetector::OnDelegatedFrameDamage( + aura::Window* window, + const gfx::Rect& damage_rect_in_dip) { if (is_shutting_down_) return; linked_ptr<WindowInfo>& info = window_infos_[window]; @@ -94,7 +95,7 @@ void VideoDetector::OnWindowPaintScheduled(aura::Window* window, base::TimeTicks now = !now_for_test_.is_null() ? now_for_test_ : base::TimeTicks::Now(); - if (info->RecordUpdateAndCheckForVideo(region, now)) + if (info->RecordUpdateAndCheckForVideo(damage_rect_in_dip, now)) MaybeNotifyObservers(window, now); } diff --git a/ash/wm/video_detector.h b/ash/wm/video_detector.h index 7a2b112..d50f9f3 100644 --- a/ash/wm/video_detector.h +++ b/ash/wm/video_detector.h @@ -69,7 +69,7 @@ class ASH_EXPORT VideoDetector : public aura::EnvObserver, virtual void OnWindowInitialized(aura::Window* window) OVERRIDE; // WindowObserver overrides. - virtual void OnWindowPaintScheduled(aura::Window* window, + virtual void OnDelegatedFrameDamage(aura::Window* window, const gfx::Rect& region) OVERRIDE; virtual void OnWindowDestroyed(aura::Window* window) OVERRIDE; diff --git a/ash/wm/video_detector_unittest.cc b/ash/wm/video_detector_unittest.cc index 025de63..f5682e6 100644 --- a/ash/wm/video_detector_unittest.cc +++ b/ash/wm/video_detector_unittest.cc @@ -109,7 +109,7 @@ TEST_F(VideoDetectorTest, Basic) { gfx::Size(VideoDetector::kMinUpdateWidth - 1, VideoDetector::kMinUpdateHeight)); for (int i = 0; i < VideoDetector::kMinFramesPerSecond; ++i) - detector_->OnWindowPaintScheduled(window.get(), update_region); + detector_->OnDelegatedFrameDamage(window.get(), update_region); EXPECT_EQ(0, observer_->num_invocations()); // Send not-quite-enough adaquately-sized updates. @@ -119,16 +119,16 @@ TEST_F(VideoDetectorTest, Basic) { gfx::Size(VideoDetector::kMinUpdateWidth, VideoDetector::kMinUpdateHeight)); for (int i = 0; i < VideoDetector::kMinFramesPerSecond - 1; ++i) - detector_->OnWindowPaintScheduled(window.get(), update_region); + detector_->OnDelegatedFrameDamage(window.get(), update_region); EXPECT_EQ(0, observer_->num_invocations()); // We should get notified after the next update, but not in response to // additional updates. - detector_->OnWindowPaintScheduled(window.get(), update_region); + detector_->OnDelegatedFrameDamage(window.get(), update_region); EXPECT_EQ(1, observer_->num_invocations()); EXPECT_EQ(0, observer_->num_fullscreens()); EXPECT_EQ(1, observer_->num_not_fullscreens()); - detector_->OnWindowPaintScheduled(window.get(), update_region); + detector_->OnDelegatedFrameDamage(window.get(), update_region); EXPECT_EQ(1, observer_->num_invocations()); EXPECT_EQ(0, observer_->num_fullscreens()); EXPECT_EQ(1, observer_->num_not_fullscreens()); @@ -137,7 +137,7 @@ TEST_F(VideoDetectorTest, Basic) { // over a one-second window that the observer should be notified. observer_->reset_stats(); AdvanceTime(base::TimeDelta::FromSeconds(2)); - detector_->OnWindowPaintScheduled(window.get(), update_region); + detector_->OnDelegatedFrameDamage(window.get(), update_region); EXPECT_EQ(0, observer_->num_invocations()); AdvanceTime(base::TimeDelta::FromMilliseconds(500)); @@ -146,14 +146,14 @@ TEST_F(VideoDetectorTest, Basic) { base::TimeDelta::FromMilliseconds(1000 / kNumFrames); for (int i = 0; i < kNumFrames; ++i) { AdvanceTime(kInterval); - detector_->OnWindowPaintScheduled(window.get(), update_region); + detector_->OnDelegatedFrameDamage(window.get(), update_region); } EXPECT_EQ(1, observer_->num_invocations()); // Keep going and check that the observer is notified again. for (int i = 0; i < kNumFrames; ++i) { AdvanceTime(kInterval); - detector_->OnWindowPaintScheduled(window.get(), update_region); + detector_->OnDelegatedFrameDamage(window.get(), update_region); } EXPECT_EQ(2, observer_->num_invocations()); @@ -162,7 +162,7 @@ TEST_F(VideoDetectorTest, Basic) { 1000 / (VideoDetector::kMinFramesPerSecond - 2)); for (int i = 0; i < kNumFrames; ++i) { AdvanceTime(kSlowInterval); - detector_->OnWindowPaintScheduled(window.get(), update_region); + detector_->OnDelegatedFrameDamage(window.get(), update_region); } EXPECT_EQ(2, observer_->num_invocations()); } @@ -179,7 +179,7 @@ TEST_F(VideoDetectorTest, Shutdown) { // It should not detect video during the shutdown. Shell::GetInstance()->OnAppTerminating(); for (int i = 0; i < VideoDetector::kMinFramesPerSecond; ++i) - detector_->OnWindowPaintScheduled(window.get(), update_region); + detector_->OnDelegatedFrameDamage(window.get(), update_region); EXPECT_EQ(0, observer_->num_invocations()); } @@ -199,7 +199,7 @@ TEST_F(VideoDetectorTest, WindowNotVisible) { gfx::Size(VideoDetector::kMinUpdateWidth, VideoDetector::kMinUpdateHeight)); for (int i = 0; i < VideoDetector::kMinFramesPerSecond; ++i) - detector_->OnWindowPaintScheduled(window.get(), update_region); + detector_->OnDelegatedFrameDamage(window.get(), update_region); EXPECT_EQ(0, observer_->num_invocations()); // Make the window visible and send more updates. @@ -207,7 +207,7 @@ TEST_F(VideoDetectorTest, WindowNotVisible) { AdvanceTime(base::TimeDelta::FromSeconds(2)); window->Show(); for (int i = 0; i < VideoDetector::kMinFramesPerSecond; ++i) - detector_->OnWindowPaintScheduled(window.get(), update_region); + detector_->OnDelegatedFrameDamage(window.get(), update_region); EXPECT_EQ(1, observer_->num_invocations()); EXPECT_EQ(0, observer_->num_fullscreens()); EXPECT_EQ(1, observer_->num_not_fullscreens()); @@ -221,7 +221,7 @@ TEST_F(VideoDetectorTest, WindowNotVisible) { window->SetBounds(offscreen_bounds); ASSERT_EQ(offscreen_bounds, window->bounds()); for (int i = 0; i < VideoDetector::kMinFramesPerSecond; ++i) - detector_->OnWindowPaintScheduled(window.get(), update_region); + detector_->OnDelegatedFrameDamage(window.get(), update_region); EXPECT_EQ(0, observer_->num_invocations()); } @@ -240,9 +240,9 @@ TEST_F(VideoDetectorTest, MultipleWindows) { gfx::Size(VideoDetector::kMinUpdateWidth, VideoDetector::kMinUpdateHeight)); for (int i = 0; i < VideoDetector::kMinFramesPerSecond; ++i) - detector_->OnWindowPaintScheduled(window1.get(), update_region); + detector_->OnDelegatedFrameDamage(window1.get(), update_region); for (int i = 0; i < VideoDetector::kMinFramesPerSecond; ++i) - detector_->OnWindowPaintScheduled(window2.get(), update_region); + detector_->OnDelegatedFrameDamage(window2.get(), update_region); EXPECT_EQ(1, observer_->num_invocations()); EXPECT_EQ(0, observer_->num_fullscreens()); EXPECT_EQ(1, observer_->num_not_fullscreens()); @@ -259,7 +259,7 @@ TEST_F(VideoDetectorTest, RepeatedNotifications) { gfx::Size(VideoDetector::kMinUpdateWidth, VideoDetector::kMinUpdateHeight)); for (int i = 0; i < VideoDetector::kMinFramesPerSecond; ++i) - detector_->OnWindowPaintScheduled(window.get(), update_region); + detector_->OnDelegatedFrameDamage(window.get(), update_region); EXPECT_EQ(1, observer_->num_invocations()); EXPECT_EQ(0, observer_->num_fullscreens()); EXPECT_EQ(1, observer_->num_not_fullscreens()); @@ -268,7 +268,7 @@ TEST_F(VideoDetectorTest, RepeatedNotifications) { AdvanceTime(base::TimeDelta::FromSeconds( static_cast<int64>(VideoDetector::kNotifyIntervalSec + 1))); for (int i = 0; i < VideoDetector::kMinFramesPerSecond; ++i) - detector_->OnWindowPaintScheduled(window.get(), update_region); + detector_->OnDelegatedFrameDamage(window.get(), update_region); EXPECT_EQ(1, observer_->num_invocations()); EXPECT_EQ(0, observer_->num_fullscreens()); EXPECT_EQ(1, observer_->num_not_fullscreens()); @@ -294,7 +294,7 @@ TEST_F(VideoDetectorTest, FullscreenWindow) { gfx::Size(VideoDetector::kMinUpdateWidth, VideoDetector::kMinUpdateHeight)); for (int i = 0; i < VideoDetector::kMinFramesPerSecond; ++i) - detector_->OnWindowPaintScheduled(window.get(), kUpdateRegion); + detector_->OnDelegatedFrameDamage(window.get(), kUpdateRegion); EXPECT_EQ(1, observer_->num_invocations()); EXPECT_EQ(1, observer_->num_fullscreens()); EXPECT_EQ(0, observer_->num_not_fullscreens()); @@ -317,7 +317,7 @@ TEST_F(VideoDetectorTest, FullscreenWindow) { observer_->reset_stats(); AdvanceTime(base::TimeDelta::FromSeconds(2)); for (int i = 0; i < VideoDetector::kMinFramesPerSecond; ++i) - detector_->OnWindowPaintScheduled(window.get(), kUpdateRegion); + detector_->OnDelegatedFrameDamage(window.get(), kUpdateRegion); EXPECT_EQ(1, observer_->num_invocations()); EXPECT_EQ(1, observer_->num_fullscreens()); EXPECT_EQ(0, observer_->num_not_fullscreens()); @@ -329,7 +329,7 @@ TEST_F(VideoDetectorTest, FullscreenWindow) { observer_->reset_stats(); AdvanceTime(base::TimeDelta::FromSeconds(2)); for (int i = 0; i < VideoDetector::kMinFramesPerSecond; ++i) - detector_->OnWindowPaintScheduled(window.get(), kUpdateRegion); + detector_->OnDelegatedFrameDamage(window.get(), kUpdateRegion); EXPECT_EQ(1, observer_->num_invocations()); EXPECT_EQ(0, observer_->num_fullscreens()); EXPECT_EQ(1, observer_->num_not_fullscreens()); |