summaryrefslogtreecommitdiffstats
path: root/cc/resources
diff options
context:
space:
mode:
authorstanisc <stanisc@chromium.org>2016-03-11 12:23:49 -0800
committerCommit bot <commit-bot@chromium.org>2016-03-11 20:25:17 +0000
commit410861d3b534bb9a0be9124e58e748f72ddf60d7 (patch)
treeccb7a0c69ade153ba54e26c203a0aa6e7c43a529 /cc/resources
parent17cd1b10ded3a5e730bbcb39c57a6d2f8e16a51e (diff)
downloadchromium_src-410861d3b534bb9a0be9124e58e748f72ddf60d7.zip
chromium_src-410861d3b534bb9a0be9124e58e748f72ddf60d7.tar.gz
chromium_src-410861d3b534bb9a0be9124e58e748f72ddf60d7.tar.bz2
Remove read lock fence for H/W decoded videos
This change relies on the synchronization mechanism introduced in https://codereview.chromium.org/1688993002 to stop using read lock fence for H/W decoded frames. Read lock fence is still used for frames produced with GpuMemoryBufferVideoFramePool. This will make Windows consistent with other platforms. On my test Windows 10 laptop this improves power consumption by 0.15-0.2 Watt when playing 1080p@60Hz H.264/MP4 video in windowed mode. BUG=580723 CQ_INCLUDE_TRYBOTS=tryserver.blink:linux_blink_rel Review URL: https://codereview.chromium.org/1783963002 Cr-Commit-Position: refs/heads/master@{#380715}
Diffstat (limited to 'cc/resources')
-rw-r--r--cc/resources/video_resource_updater.cc5
-rw-r--r--cc/resources/video_resource_updater_unittest.cc9
2 files changed, 12 insertions, 2 deletions
diff --git a/cc/resources/video_resource_updater.cc b/cc/resources/video_resource_updater.cc
index 5b4751d..5615455 100644
--- a/cc/resources/video_resource_updater.cc
+++ b/cc/resources/video_resource_updater.cc
@@ -625,7 +625,10 @@ VideoFrameExternalResources VideoResourceUpdater::CreateForHardwarePlanes(
return VideoFrameExternalResources();
VideoFrameExternalResources external_resources;
- external_resources.read_lock_fences_enabled = true;
+ if (video_frame->metadata()->IsTrue(
+ media::VideoFrameMetadata::READ_LOCK_FENCES_ENABLED)) {
+ external_resources.read_lock_fences_enabled = true;
+ }
external_resources.type = ResourceTypeForVideoFrame(video_frame.get());
if (external_resources.type == VideoFrameExternalResources::NONE) {
diff --git a/cc/resources/video_resource_updater_unittest.cc b/cc/resources/video_resource_updater_unittest.cc
index 98b1fa7..4adf837 100644
--- a/cc/resources/video_resource_updater_unittest.cc
+++ b/cc/resources/video_resource_updater_unittest.cc
@@ -460,10 +460,17 @@ TEST_F(VideoResourceUpdaterTest, CreateForHardwarePlanes) {
resources = updater.CreateExternalResourcesFromVideoFrame(video_frame);
EXPECT_EQ(VideoFrameExternalResources::YUV_RESOURCE, resources.type);
- EXPECT_TRUE(resources.read_lock_fences_enabled);
EXPECT_EQ(3u, resources.mailboxes.size());
EXPECT_EQ(3u, resources.release_callbacks.size());
EXPECT_EQ(0u, resources.software_resources.size());
+ EXPECT_FALSE(resources.read_lock_fences_enabled);
+
+ video_frame = CreateTestYuvHardwareVideoFrame();
+ video_frame->metadata()->SetBoolean(
+ media::VideoFrameMetadata::READ_LOCK_FENCES_ENABLED, true);
+
+ resources = updater.CreateExternalResourcesFromVideoFrame(video_frame);
+ EXPECT_TRUE(resources.read_lock_fences_enabled);
}
TEST_F(VideoResourceUpdaterTest, CreateForHardwarePlanes_StreamTexture) {