• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #pragma once
2 /*
3  * Copyright (C) 2016 The Android Open Source Project
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *      http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17 
18 #include <functional>
19 
20 #include <hardware/gralloc.h>
21 #include "hwcomposer.h"
22 
23 namespace cvd {
24 
25 using FbBroadcaster = std::function<void(int)>;
26 
27 class BaseComposer {
28  public:
29   BaseComposer(int64_t vsync_base_timestamp, int32_t vsync_period_ns);
30   ~BaseComposer();
31 
32   // Sets the composition type of each layer and returns the number of layers
33   // to be composited by the hwcomposer.
34   int PrepareLayers(size_t num_layers, vsoc_hwc_layer* layers);
35   // Returns 0 if successful.
36   int SetLayers(size_t num_layers, vsoc_hwc_layer* layers);
37   // Changes the broadcaster, gives the ability to report more than just the
38   // offset by using a wrapper like the StatsKeepingComposer. Returns the old
39   // broadcaster. Passing a NULL pointer will cause the composer to not
40   // broadcast at all.
41   FbBroadcaster ReplaceFbBroadcaster(FbBroadcaster);
42   void Dump(char* buff, int buff_len);
43 
44  protected:
45   void Broadcast(int32_t offset);
46   int NextScreenBuffer();
47 
48   const gralloc_module_t* gralloc_module_;
49   int64_t vsync_base_timestamp_;
50   int32_t vsync_period_ns_;
51   int last_frame_buffer_ = -1; // The first index will be 0
52 
53  private:
54   // Returns buffer offset or negative on error.
55   int PostFrameBufferTarget(buffer_handle_t handle);
56   FbBroadcaster fb_broadcaster_;
57 };
58 
59 }  // namespace cvd
60