From 410861d3b534bb9a0be9124e58e748f72ddf60d7 Mon Sep 17 00:00:00 2001 From: stanisc Date: Fri, 11 Mar 2016 12:23:49 -0800 Subject: 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} --- cc/resources/video_resource_updater.cc | 5 ++++- cc/resources/video_resource_updater_unittest.cc | 9 ++++++++- 2 files changed, 12 insertions(+), 2 deletions(-) (limited to 'cc/resources') 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) { -- cgit v1.1