1 #include "surface_flinger_view.h"
3 #include <binder/IServiceManager.h>
4 #include <impl/vr_composer_view.h>
5 #include <private/dvr/native_buffer.h>
7 #include "hwc_callback.h"
13 SurfaceFlingerView::SurfaceFlingerView() {}
15 SurfaceFlingerView::~SurfaceFlingerView() {}
17 bool SurfaceFlingerView::Initialize(HwcCallback::Client *client) {
18 const char instance[] = "DaydreamDisplay";
19 composer_service_ = IVrComposerView::getService(instance);
20 if (composer_service_ == nullptr) {
21 ALOGE("Failed to initialize composer service");
25 if (!composer_service_->isRemote()) {
26 ALOGE("Composer service is not remote");
30 // TODO(dnicoara): Query this from the composer service.
34 composer_observer_.reset(new HwcCallback(composer_service_.get(), client));
38 bool SurfaceFlingerView::GetTextures(const HwcCallback::Frame& frame,
39 std::vector<TextureLayer>* texture_layers,
40 TextureLayer* ime_layer,
41 bool debug, bool skip_first_layer) const {
42 auto& layers = frame.layers();
43 texture_layers->clear();
46 // Skip the second layer if it is from the VR app.
47 if (!debug && skip_first_layer) {
49 if (layers[0].appid && layers[0].appid == layers[1].appid)
53 for (size_t i = start; i < layers.size(); ++i) {
54 if (!debug && layers[i].should_skip_layer())
57 std::unique_ptr<Texture> texture(new Texture());
58 if (!texture->Initialize(layers[i].buffer->getNativeBuffer())) {
59 ALOGE("Failed to create texture");
60 texture_layers->clear();
64 TextureLayer texture_layer = {
65 std::move(texture), layers[i].crop, layers[i].display_frame,
66 layers[i].blending, layers[i].alpha,
68 if (debug && layers[i].type == HwcCallback::HwcLayer::kInputMethod) {
69 *ime_layer = std::move(texture_layer);
71 texture_layers->emplace_back(std::move(texture_layer));
79 } // namespace android