blob: 381369f5c615457831b7ae8014352d68e916bd3a [file] [log] [blame]
// 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.
#include "cc/base/cc_export.h"
#include "cc/layers/layer.h"
#include "cc/surfaces/surface_id.h"
#include "cc/surfaces/surface_sequence.h"
#include "ui/gfx/geometry/size.h"
namespace cc {
// A layer that renders a surface referencing the output of another compositor
// instance or client.
class CC_EXPORT SurfaceLayer : public Layer {
// This callback is run when a SurfaceSequence needs to be satisfied, but
// the parent compositor is unable to. It can be called on either the main
// or impl threads.
using SatisfyCallback = base::Callback<void(SurfaceSequence)>;
// This callback is run to require that a specific SurfaceSequence is
// received before a SurfaceId is destroyed.
using RequireCallback = base::Callback<void(SurfaceId, SurfaceSequence)>;
static scoped_refptr<SurfaceLayer> Create(
const SatisfyCallback& satisfy_callback,
const RequireCallback& require_callback);
void SetSurfaceId(SurfaceId surface_id, float scale, const gfx::Size& size);
// Layer overrides.
scoped_ptr<LayerImpl> CreateLayerImpl(LayerTreeImpl* tree_impl) override;
void SetLayerTreeHost(LayerTreeHost* host) override;
void PushPropertiesTo(LayerImpl* layer) override;
void CalculateContentsScale(float ideal_contents_scale,
float* contents_scale_x,
float* contents_scale_y,
gfx::Size* content_bounds) override;
SurfaceLayer(const SatisfyCallback& satisfy_callback,
const RequireCallback& require_callback);
bool HasDrawableContent() const override;
~SurfaceLayer() override;
void CreateNewDestroySequence();
void SatisfyDestroySequence();
SurfaceId surface_id_;
gfx::Size surface_size_;
float surface_scale_;
SurfaceSequence destroy_sequence_;
SatisfyCallback satisfy_callback_;
RequireCallback require_callback_;
} // namespace cc