Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(44)

Side by Side Diff: cc/trees/layer_tree_host_impl.cc

Issue 2140783002: services/ui: Detect when a video is playing (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: . Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2011 The Chromium Authors. All rights reserved. 1 // Copyright 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/trees/layer_tree_host_impl.h" 5 #include "cc/trees/layer_tree_host_impl.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <algorithm> 10 #include <algorithm>
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
158 scroll_on_main_thread); 158 scroll_on_main_thread);
159 } 159 }
160 } 160 }
161 161
162 } // namespace 162 } // namespace
163 163
164 DEFINE_SCOPED_UMA_HISTOGRAM_TIMER(PendingTreeDurationHistogramTimer, 164 DEFINE_SCOPED_UMA_HISTOGRAM_TIMER(PendingTreeDurationHistogramTimer,
165 "Scheduling.%s.PendingTreeDuration"); 165 "Scheduling.%s.PendingTreeDuration");
166 166
167 LayerTreeHostImpl::FrameData::FrameData() 167 LayerTreeHostImpl::FrameData::FrameData()
168 : render_surface_layer_list(nullptr), has_no_damage(false) {} 168 : render_surface_layer_list(nullptr),
169 has_no_damage(false),
170 may_contain_video(false) {}
169 171
170 LayerTreeHostImpl::FrameData::~FrameData() {} 172 LayerTreeHostImpl::FrameData::~FrameData() {}
171 173
172 std::unique_ptr<LayerTreeHostImpl> LayerTreeHostImpl::Create( 174 std::unique_ptr<LayerTreeHostImpl> LayerTreeHostImpl::Create(
173 const LayerTreeSettings& settings, 175 const LayerTreeSettings& settings,
174 LayerTreeHostImplClient* client, 176 LayerTreeHostImplClient* client,
175 TaskRunnerProvider* task_runner_provider, 177 TaskRunnerProvider* task_runner_provider,
176 RenderingStatsInstrumentation* rendering_stats_instrumentation, 178 RenderingStatsInstrumentation* rendering_stats_instrumentation,
177 SharedBitmapManager* shared_bitmap_manager, 179 SharedBitmapManager* shared_bitmap_manager,
178 gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager, 180 gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager,
(...skipping 726 matching lines...) Expand 10 before | Expand all | Expand 10 after
905 contributing_render_pass, 907 contributing_render_pass,
906 &append_quads_data); 908 &append_quads_data);
907 } else if (it.represents_itself() && !it->visible_layer_rect().IsEmpty()) { 909 } else if (it.represents_itself() && !it->visible_layer_rect().IsEmpty()) {
908 bool occluded = 910 bool occluded =
909 it->draw_properties().occlusion_in_content_space.IsOccluded( 911 it->draw_properties().occlusion_in_content_space.IsOccluded(
910 it->visible_layer_rect()); 912 it->visible_layer_rect());
911 if (!occluded && it->WillDraw(draw_mode, resource_provider_.get())) { 913 if (!occluded && it->WillDraw(draw_mode, resource_provider_.get())) {
912 DCHECK_EQ(active_tree_.get(), it->layer_tree_impl()); 914 DCHECK_EQ(active_tree_.get(), it->layer_tree_impl());
913 915
914 frame->will_draw_layers.push_back(*it); 916 frame->will_draw_layers.push_back(*it);
917 if (it->may_contain_video())
918 frame->may_contain_video = true;
915 919
916 it->AppendQuads(target_render_pass, &append_quads_data); 920 it->AppendQuads(target_render_pass, &append_quads_data);
917 } 921 }
918 922
919 ++layers_drawn; 923 ++layers_drawn;
920 } 924 }
921 925
922 rendering_stats_instrumentation_->AddVisibleContentArea( 926 rendering_stats_instrumentation_->AddVisibleContentArea(
923 append_quads_data.visible_layer_area); 927 append_quads_data.visible_layer_area);
924 rendering_stats_instrumentation_->AddApproximatedVisibleContentArea( 928 rendering_stats_instrumentation_->AddApproximatedVisibleContentArea(
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after
1093 1097
1094 // This will cause NotifyTileStateChanged() to be called for any tiles that 1098 // This will cause NotifyTileStateChanged() to be called for any tiles that
1095 // completed, which will add damage for visible tiles to the frame for them so 1099 // completed, which will add damage for visible tiles to the frame for them so
1096 // they appear as part of the current frame being drawn. 1100 // they appear as part of the current frame being drawn.
1097 tile_manager_.Flush(); 1101 tile_manager_.Flush();
1098 1102
1099 frame->render_surface_layer_list = &active_tree_->RenderSurfaceLayerList(); 1103 frame->render_surface_layer_list = &active_tree_->RenderSurfaceLayerList();
1100 frame->render_passes.clear(); 1104 frame->render_passes.clear();
1101 frame->will_draw_layers.clear(); 1105 frame->will_draw_layers.clear();
1102 frame->has_no_damage = false; 1106 frame->has_no_damage = false;
1107 frame->may_contain_video = false;
1103 1108
1104 if (active_tree_->RootRenderSurface()) { 1109 if (active_tree_->RootRenderSurface()) {
1105 gfx::Rect device_viewport_damage_rect = viewport_damage_rect_; 1110 gfx::Rect device_viewport_damage_rect = viewport_damage_rect_;
1106 viewport_damage_rect_ = gfx::Rect(); 1111 viewport_damage_rect_ = gfx::Rect();
1107 1112
1108 active_tree_->RootRenderSurface()->damage_tracker()->AddDamageNextUpdate( 1113 active_tree_->RootRenderSurface()->damage_tracker()->AddDamageNextUpdate(
1109 device_viewport_damage_rect); 1114 device_viewport_damage_rect);
1110 } 1115 }
1111 1116
1112 DrawResult draw_result = CalculateRenderPasses(frame); 1117 DrawResult draw_result = CalculateRenderPasses(frame);
(...skipping 704 matching lines...) Expand 10 before | Expand all | Expand 10 after
1817 return renderer_->Capabilities(); 1822 return renderer_->Capabilities();
1818 } 1823 }
1819 1824
1820 bool LayerTreeHostImpl::SwapBuffers(const LayerTreeHostImpl::FrameData& frame) { 1825 bool LayerTreeHostImpl::SwapBuffers(const LayerTreeHostImpl::FrameData& frame) {
1821 ResetRequiresHighResToDraw(); 1826 ResetRequiresHighResToDraw();
1822 if (frame.has_no_damage) { 1827 if (frame.has_no_damage) {
1823 active_tree()->BreakSwapPromises(SwapPromise::SWAP_FAILS); 1828 active_tree()->BreakSwapPromises(SwapPromise::SWAP_FAILS);
1824 return false; 1829 return false;
1825 } 1830 }
1826 CompositorFrameMetadata metadata = MakeCompositorFrameMetadata(); 1831 CompositorFrameMetadata metadata = MakeCompositorFrameMetadata();
1832 metadata.may_contain_video = frame.may_contain_video;
1827 active_tree()->FinishSwapPromises(&metadata); 1833 active_tree()->FinishSwapPromises(&metadata);
1828 for (auto& latency : metadata.latency_info) { 1834 for (auto& latency : metadata.latency_info) {
1829 TRACE_EVENT_WITH_FLOW1("input,benchmark", 1835 TRACE_EVENT_WITH_FLOW1("input,benchmark",
1830 "LatencyInfo.Flow", 1836 "LatencyInfo.Flow",
1831 TRACE_ID_DONT_MANGLE(latency.trace_id()), 1837 TRACE_ID_DONT_MANGLE(latency.trace_id()),
1832 TRACE_EVENT_FLAG_FLOW_IN | TRACE_EVENT_FLAG_FLOW_OUT, 1838 TRACE_EVENT_FLAG_FLOW_IN | TRACE_EVENT_FLAG_FLOW_OUT,
1833 "step", "SwapBuffers"); 1839 "step", "SwapBuffers");
1834 // Only add the latency component once for renderer swap, not the browser 1840 // Only add the latency component once for renderer swap, not the browser
1835 // swap. 1841 // swap.
1836 if (!latency.FindLatency(ui::INPUT_EVENT_LATENCY_RENDERER_SWAP_COMPONENT, 1842 if (!latency.FindLatency(ui::INPUT_EVENT_LATENCY_RENDERER_SWAP_COMPONENT,
(...skipping 2213 matching lines...) Expand 10 before | Expand all | Expand 10 after
4050 return task_runner_provider_->HasImplThread(); 4056 return task_runner_provider_->HasImplThread();
4051 } 4057 }
4052 4058
4053 bool LayerTreeHostImpl::CommitToActiveTree() const { 4059 bool LayerTreeHostImpl::CommitToActiveTree() const {
4054 // In single threaded mode we skip the pending tree and commit directly to the 4060 // In single threaded mode we skip the pending tree and commit directly to the
4055 // active tree. 4061 // active tree.
4056 return !task_runner_provider_->HasImplThread(); 4062 return !task_runner_provider_->HasImplThread();
4057 } 4063 }
4058 4064
4059 } // namespace cc 4065 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698