Home | History | Annotate | Download | only in vsoc
      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