summaryrefslogtreecommitdiffstats
path: root/ash
diff options
context:
space:
mode:
authorenne <enne@chromium.org>2014-08-23 14:27:46 -0700
committerCommit bot <commit-bot@chromium.org>2014-08-23 21:33:41 +0000
commit9a3ddb332a5ec5e21a5767b2891ba161cda5a3d0 (patch)
treef9035ea15d0ae44836b0a89b019e89d18770c935 /ash
parent145425d17c8351595048b0dff319e8ff284d983f (diff)
downloadchromium_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.cc3
-rw-r--r--ash/wm/video_detector.cc7
-rw-r--r--ash/wm/video_detector.h2
-rw-r--r--ash/wm/video_detector_unittest.cc38
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());