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