diff options
author | stanisc <stanisc@chromium.org> | 2016-03-11 12:23:49 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-03-11 20:25:17 +0000 |
commit | 410861d3b534bb9a0be9124e58e748f72ddf60d7 (patch) | |
tree | ccb7a0c69ade153ba54e26c203a0aa6e7c43a529 /cc/resources | |
parent | 17cd1b10ded3a5e730bbcb39c57a6d2f8e16a51e (diff) | |
download | chromium_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.cc | 5 | ||||
-rw-r--r-- | cc/resources/video_resource_updater_unittest.cc | 9 |
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) { |