1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef CC_OUTPUT_OVERLAY_PROCESSOR_H_
6#define CC_OUTPUT_OVERLAY_PROCESSOR_H_
7
8#include "base/basictypes.h"
9#include "base/memory/scoped_ptr.h"
10#include "cc/base/cc_export.h"
11#include "cc/output/overlay_candidate.h"
12#include "cc/quads/render_pass.h"
13
14namespace cc {
15class OutputSurface;
16class ResourceProvider;
17
18class CC_EXPORT OverlayProcessor {
19 public:
20  class CC_EXPORT Strategy {
21   public:
22    virtual ~Strategy() {}
23    // Returns false if the strategy cannot be made to work with the
24    // current set of render passes. Returns true if the strategy was successful
25    // and adds any additional passes necessary to represent overlays to
26    // |render_passes_in_draw_order|.
27    virtual bool Attempt(RenderPassList* render_passes_in_draw_order,
28                         OverlayCandidateList* candidates) = 0;
29  };
30  typedef ScopedPtrVector<Strategy> StrategyList;
31
32  OverlayProcessor(OutputSurface* surface, ResourceProvider* resource_provider);
33  virtual ~OverlayProcessor();
34  // Virtual to allow testing different strategies.
35  virtual void Initialize();
36
37  void ProcessForOverlays(RenderPassList* render_passes_in_draw_order,
38                          OverlayCandidateList* candidate_list);
39
40 protected:
41  StrategyList strategies_;
42  OutputSurface* surface_;
43  ResourceProvider* resource_provider_;
44
45 private:
46  DISALLOW_COPY_AND_ASSIGN(OverlayProcessor);
47};
48
49}  // namespace cc
50
51#endif  // CC_OUTPUT_OVERLAY_PROCESSOR_H_
52