diff options
Diffstat (limited to 'cc/surfaces/surface_aggregator.h')
-rw-r--r-- | cc/surfaces/surface_aggregator.h | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/cc/surfaces/surface_aggregator.h b/cc/surfaces/surface_aggregator.h new file mode 100644 index 0000000..aa0fd85 --- /dev/null +++ b/cc/surfaces/surface_aggregator.h @@ -0,0 +1,65 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CC_SURFACES_SURFACE_AGGREGATOR_H_ +#define CC_SURFACES_SURFACE_AGGREGATOR_H_ + +#include <set> + +#include "base/containers/scoped_ptr_hash_map.h" +#include "base/memory/scoped_ptr.h" +#include "cc/quads/render_pass.h" +#include "cc/surfaces/surfaces_export.h" + +namespace cc { + +class CompositorFrame; +class DelegatedFrameData; +class SurfaceDrawQuad; +class SurfaceManager; + +class CC_SURFACES_EXPORT SurfaceAggregator { + public: + explicit SurfaceAggregator(SurfaceManager* manager); + ~SurfaceAggregator(); + + scoped_ptr<CompositorFrame> Aggregate(int surface_id); + + private: + DelegatedFrameData* GetReferencedDataForSurfaceID(int surface_id); + RenderPass::Id RemapPassId(RenderPass::Id surface_local_pass_id, + int surface_id); + + void HandleSurfaceQuad(const SurfaceDrawQuad* surface_quad, + RenderPass* dest_pass); + void CopyQuadsToPass(const QuadList& source_quad_list, + const SharedQuadStateList& source_shared_quad_state_list, + RenderPass* dest_pass, + int surface_id); + void CopyPasses(const RenderPassList& source_pass_list, int surface_id); + + SurfaceManager* manager_; + + class RenderPassIdAllocator; + typedef base::ScopedPtrHashMap<int, RenderPassIdAllocator> + RenderPassIdAllocatorMap; + RenderPassIdAllocatorMap render_pass_allocator_map_; + + // The following state is only valid for the duration of one Aggregate call + // and is only stored on the class to avoid having to pass through every + // function call. + + // This is the set of surfaces referenced in the aggregation so far, used to + // detect cycles. + std::set<int> referenced_surfaces_; + + // This is the pass list for the aggregated frame. + RenderPassList* dest_pass_list_; + + DISALLOW_COPY_AND_ASSIGN(SurfaceAggregator); +}; + +} // namespace cc + +#endif // CC_SURFACES_SURFACE_AGGREGATOR_H_ |