blob: 9b7358965b10e81865bf2de4a40f05773ea27160 [file] [log] [blame]
James Robinson646469d2014-10-03 15:33:28 -07001// 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_LAYERS_SURFACE_LAYER_H_
6#define CC_LAYERS_SURFACE_LAYER_H_
7
8#include "cc/base/cc_export.h"
9#include "cc/layers/layer.h"
10#include "cc/surfaces/surface_id.h"
James Robinson1ae030a2014-11-07 08:32:47 -080011#include "cc/surfaces/surface_sequence.h"
James Robinson6e9a1c92014-11-13 17:05:42 -080012#include "ui/gfx/size.h"
James Robinson646469d2014-10-03 15:33:28 -070013
14namespace cc {
15
16// A layer that renders a surface referencing the output of another compositor
17// instance or client.
18class CC_EXPORT SurfaceLayer : public Layer {
19 public:
James Robinson1ae030a2014-11-07 08:32:47 -080020 // This callback is run when a SurfaceSequence needs to be satisfied, but
21 // the parent compositor is unable to. It can be called on either the main
22 // or impl threads.
23 using SatisfyCallback = base::Callback<void(SurfaceSequence)>;
24
25 // This callback is run to require that a specific SurfaceSequence is
26 // received before a SurfaceId is destroyed.
27 using RequireCallback = base::Callback<void(SurfaceId, SurfaceSequence)>;
28
29 static scoped_refptr<SurfaceLayer> Create(
30 const SatisfyCallback& satisfy_callback,
31 const RequireCallback& require_callback);
James Robinson646469d2014-10-03 15:33:28 -070032
James Robinson6e9a1c92014-11-13 17:05:42 -080033 void SetSurfaceId(SurfaceId surface_id, float scale, const gfx::Size& size);
James Robinson646469d2014-10-03 15:33:28 -070034
35 // Layer overrides.
James Robinsone1b30cf2014-10-21 12:25:40 -070036 scoped_ptr<LayerImpl> CreateLayerImpl(LayerTreeImpl* tree_impl) override;
James Robinson1ae030a2014-11-07 08:32:47 -080037 void SetLayerTreeHost(LayerTreeHost* host) override;
James Robinsone1b30cf2014-10-21 12:25:40 -070038 void PushPropertiesTo(LayerImpl* layer) override;
James Robinson6e9a1c92014-11-13 17:05:42 -080039 void CalculateContentsScale(float ideal_contents_scale,
40 float* contents_scale_x,
41 float* contents_scale_y,
42 gfx::Size* content_bounds) override;
James Robinson646469d2014-10-03 15:33:28 -070043
44 protected:
James Robinson1ae030a2014-11-07 08:32:47 -080045 SurfaceLayer(const SatisfyCallback& satisfy_callback,
46 const RequireCallback& require_callback);
James Robinsone1b30cf2014-10-21 12:25:40 -070047 bool HasDrawableContent() const override;
James Robinson646469d2014-10-03 15:33:28 -070048
49 private:
James Robinsone1b30cf2014-10-21 12:25:40 -070050 ~SurfaceLayer() override;
James Robinson1ae030a2014-11-07 08:32:47 -080051 void CreateNewDestroySequence();
52 void SatisfyDestroySequence();
James Robinson646469d2014-10-03 15:33:28 -070053
54 SurfaceId surface_id_;
James Robinson6e9a1c92014-11-13 17:05:42 -080055 gfx::Size surface_size_;
56 float surface_scale_;
James Robinson1ae030a2014-11-07 08:32:47 -080057 SurfaceSequence destroy_sequence_;
58 SatisfyCallback satisfy_callback_;
59 RequireCallback require_callback_;
James Robinson646469d2014-10-03 15:33:28 -070060
61 DISALLOW_COPY_AND_ASSIGN(SurfaceLayer);
62};
63
64} // namespace cc
65
66#endif // CC_LAYERS_SURFACE_LAYER_H_