123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// found in the LICENSE file. 423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "cc/output/overlay_processor.h" 623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "cc/output/output_surface.h" 823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "cc/output/overlay_strategy_single_on_top.h" 95f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "ui/gfx/geometry/rect_conversions.h" 1023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "ui/gfx/transform.h" 1123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 1223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)namespace cc { 1323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 1423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)OverlayProcessor::OverlayProcessor(OutputSurface* surface, 1523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) ResourceProvider* resource_provider) 1623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) : surface_(surface), resource_provider_(resource_provider) {} 1723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 1823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)void OverlayProcessor::Initialize() { 1923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) DCHECK(surface_); 20effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (!resource_provider_) 21effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return; 22effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 2323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) OverlayCandidateValidator* candidates = 2423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) surface_->overlay_candidate_validator(); 2523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) if (candidates) { 2623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) strategies_.push_back(scoped_ptr<Strategy>( 2723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) new OverlayStrategySingleOnTop(candidates, resource_provider_))); 2823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) } 2923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} 3023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 3123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)OverlayProcessor::~OverlayProcessor() {} 3223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 3323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)void OverlayProcessor::ProcessForOverlays( 34effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch RenderPassList* render_passes_in_draw_order, 35effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch OverlayCandidateList* candidate_list) { 3623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) for (StrategyList::iterator it = strategies_.begin(); it != strategies_.end(); 3723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) ++it) { 38effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if ((*it)->Attempt(render_passes_in_draw_order, candidate_list)) 3923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) return; 4023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) } 4123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} 4223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 4323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} // namespace cc 44