ISurfaceComposer.cpp revision 28f24d0ab481bd9c6fd5618414fee694e837c5c6
1edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project/* 2edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project 3edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * 4edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * you may not use this file except in compliance with the License. 6edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * You may obtain a copy of the License at 7edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * 8edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * 10edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * See the License for the specific language governing permissions and 14edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * limitations under the License. 15edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project */ 16edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 17edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// tag as surfaceflinger 18edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#define LOG_TAG "SurfaceFlinger" 19edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 20edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <stdint.h> 21edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <sys/types.h> 22edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 23c5b2c0bf8007562536b822eb060fc54a01f8e08bMathias Agopian#include <binder/Parcel.h> 24c5b2c0bf8007562536b822eb060fc54a01f8e08bMathias Agopian#include <binder/IMemory.h> 25c5b2c0bf8007562536b822eb060fc54a01f8e08bMathias Agopian#include <binder/IPCThreadState.h> 26c5b2c0bf8007562536b822eb060fc54a01f8e08bMathias Agopian#include <binder/IServiceManager.h> 27edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 28d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian#include <gui/BitTube.h> 29d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian#include <gui/IDisplayEventConnection.h> 3090ac799241f077a7b7e6c1875fd933864c8dd2a7Mathias Agopian#include <gui/ISurfaceComposer.h> 312adaf04fab35cf47c824d74d901b54094e01ccd3Andy McFadden#include <gui/IGraphicBufferProducer.h> 32d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian 3390ac799241f077a7b7e6c1875fd933864c8dd2a7Mathias Agopian#include <private/gui/LayerState.h> 34edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 3528f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright#include <system/graphics.h> 3628f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright 3790ac799241f077a7b7e6c1875fd933864c8dd2a7Mathias Agopian#include <ui/DisplayInfo.h> 3867d8bd66aaf04805cb8f2616ba964141b865e3b9Lajos Molnar#include <ui/DisplayStatInfo.h> 39c4f471e75a8ec64ec34e3f2944a5a756215d0becDan Stoza#include <ui/HdrCapabilities.h> 40582270d69db94286a248bd829f1ae6f910d45124Jamie Gennis 41134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis#include <utils/Log.h> 429cce325fae8adcf7560a28eef394489f09bad74dMathias Agopian 43edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// --------------------------------------------------------------------------- 44edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 45edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectnamespace android { 46edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 47d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopianclass IDisplayEventConnection; 48d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian 49edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectclass BpSurfaceComposer : public BpInterface<ISurfaceComposer> 50edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 51edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectpublic: 52edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project BpSurfaceComposer(const sp<IBinder>& impl) 53edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project : BpInterface<ISurfaceComposer>(impl) 54edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project { 55edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project } 56edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 57d723bd7669b4fc88dc282d8bf8ba5ecb2849d22fDan Stoza virtual ~BpSurfaceComposer(); 58d723bd7669b4fc88dc282d8bf8ba5ecb2849d22fDan Stoza 597e27f05739c8a2655cf0f7faea35614ce0a50278Mathias Agopian virtual sp<ISurfaceComposerClient> createConnection() 60edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project { 61edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project Parcel data, reply; 62edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project data.writeInterfaceToken(ISurfaceComposer::getInterfaceDescriptor()); 63edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project remote()->transact(BnSurfaceComposer::CREATE_CONNECTION, data, &reply); 647e27f05739c8a2655cf0f7faea35614ce0a50278Mathias Agopian return interface_cast<ISurfaceComposerClient>(reply.readStrongBinder()); 65edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project } 66edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 679a78c90cd46b2a3bd637b056873149d3b94384b4Jamie Gennis virtual sp<IGraphicBufferAlloc> createGraphicBufferAlloc() 689a78c90cd46b2a3bd637b056873149d3b94384b4Jamie Gennis { 699a78c90cd46b2a3bd637b056873149d3b94384b4Jamie Gennis Parcel data, reply; 709a78c90cd46b2a3bd637b056873149d3b94384b4Jamie Gennis data.writeInterfaceToken(ISurfaceComposer::getInterfaceDescriptor()); 719a78c90cd46b2a3bd637b056873149d3b94384b4Jamie Gennis remote()->transact(BnSurfaceComposer::CREATE_GRAPHIC_BUFFER_ALLOC, data, &reply); 729a78c90cd46b2a3bd637b056873149d3b94384b4Jamie Gennis return interface_cast<IGraphicBufferAlloc>(reply.readStrongBinder()); 739a78c90cd46b2a3bd637b056873149d3b94384b4Jamie Gennis } 749a78c90cd46b2a3bd637b056873149d3b94384b4Jamie Gennis 758b33f032327f8de0dcc0e6d0d43ed80f834b51f6Mathias Agopian virtual void setTransactionState( 768b33f032327f8de0dcc0e6d0d43ed80f834b51f6Mathias Agopian const Vector<ComposerState>& state, 778b33f032327f8de0dcc0e6d0d43ed80f834b51f6Mathias Agopian const Vector<DisplayState>& displays, 788b33f032327f8de0dcc0e6d0d43ed80f834b51f6Mathias Agopian uint32_t flags) 79edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project { 80edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project Parcel data, reply; 81edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project data.writeInterfaceToken(ISurfaceComposer::getInterfaceDescriptor()); 82d723bd7669b4fc88dc282d8bf8ba5ecb2849d22fDan Stoza 83d723bd7669b4fc88dc282d8bf8ba5ecb2849d22fDan Stoza data.writeUint32(static_cast<uint32_t>(state.size())); 84d723bd7669b4fc88dc282d8bf8ba5ecb2849d22fDan Stoza for (const auto& s : state) { 85d723bd7669b4fc88dc282d8bf8ba5ecb2849d22fDan Stoza s.write(data); 868b33f032327f8de0dcc0e6d0d43ed80f834b51f6Mathias Agopian } 87d723bd7669b4fc88dc282d8bf8ba5ecb2849d22fDan Stoza 88d723bd7669b4fc88dc282d8bf8ba5ecb2849d22fDan Stoza data.writeUint32(static_cast<uint32_t>(displays.size())); 89d723bd7669b4fc88dc282d8bf8ba5ecb2849d22fDan Stoza for (const auto& d : displays) { 90d723bd7669b4fc88dc282d8bf8ba5ecb2849d22fDan Stoza d.write(data); 91698c0873cf2e07bdc7fd1e72169aee2a19fa40d7Mathias Agopian } 92d723bd7669b4fc88dc282d8bf8ba5ecb2849d22fDan Stoza 93d723bd7669b4fc88dc282d8bf8ba5ecb2849d22fDan Stoza data.writeUint32(flags); 94b8d69a55f1c187a35ac41e69de63251f5501b6f4Jamie Gennis remote()->transact(BnSurfaceComposer::SET_TRANSACTION_STATE, data, &reply); 95edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project } 96edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 97edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project virtual void bootFinished() 98edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project { 99edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project Parcel data, reply; 100edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project data.writeInterfaceToken(ISurfaceComposer::getInterfaceDescriptor()); 101edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project remote()->transact(BnSurfaceComposer::BOOT_FINISHED, data, &reply); 102edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project } 103edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 1042a9fc493dfdba67108e4335bb1fe931bc1e2a025Mathias Agopian virtual status_t captureScreen(const sp<IBinder>& display, 1052a9fc493dfdba67108e4335bb1fe931bc1e2a025Mathias Agopian const sp<IGraphicBufferProducer>& producer, 106c18790018be5d7ea7061ccbc81f3044e74adc823Dan Stoza Rect sourceCrop, uint32_t reqWidth, uint32_t reqHeight, 107c701401f8cec2e5309f8b57e2b97baced5093274Dan Stoza uint32_t minLayerZ, uint32_t maxLayerZ, 108c3ebe66b49cfba035e1fd0e160a13db38eb81b0eRiley Andrews bool useIdentityTransform, 109c3ebe66b49cfba035e1fd0e160a13db38eb81b0eRiley Andrews ISurfaceComposer::Rotation rotation) 1102a9fc493dfdba67108e4335bb1fe931bc1e2a025Mathias Agopian { 1112a9fc493dfdba67108e4335bb1fe931bc1e2a025Mathias Agopian Parcel data, reply; 1122a9fc493dfdba67108e4335bb1fe931bc1e2a025Mathias Agopian data.writeInterfaceToken(ISurfaceComposer::getInterfaceDescriptor()); 1132a9fc493dfdba67108e4335bb1fe931bc1e2a025Mathias Agopian data.writeStrongBinder(display); 1142ea926bda2fa30f3ba8d0ed2d2395a8ada952e6eMarco Nelissen data.writeStrongBinder(IInterface::asBinder(producer)); 115c18790018be5d7ea7061ccbc81f3044e74adc823Dan Stoza data.write(sourceCrop); 116d723bd7669b4fc88dc282d8bf8ba5ecb2849d22fDan Stoza data.writeUint32(reqWidth); 117d723bd7669b4fc88dc282d8bf8ba5ecb2849d22fDan Stoza data.writeUint32(reqHeight); 118d723bd7669b4fc88dc282d8bf8ba5ecb2849d22fDan Stoza data.writeUint32(minLayerZ); 119d723bd7669b4fc88dc282d8bf8ba5ecb2849d22fDan Stoza data.writeUint32(maxLayerZ); 120c701401f8cec2e5309f8b57e2b97baced5093274Dan Stoza data.writeInt32(static_cast<int32_t>(useIdentityTransform)); 121c3ebe66b49cfba035e1fd0e160a13db38eb81b0eRiley Andrews data.writeInt32(static_cast<int32_t>(rotation)); 1222a9fc493dfdba67108e4335bb1fe931bc1e2a025Mathias Agopian remote()->transact(BnSurfaceComposer::CAPTURE_SCREEN, data, &reply); 1232a9fc493dfdba67108e4335bb1fe931bc1e2a025Mathias Agopian return reply.readInt32(); 1242a9fc493dfdba67108e4335bb1fe931bc1e2a025Mathias Agopian } 1252a9fc493dfdba67108e4335bb1fe931bc1e2a025Mathias Agopian 126582270d69db94286a248bd829f1ae6f910d45124Jamie Gennis virtual bool authenticateSurfaceTexture( 1272adaf04fab35cf47c824d74d901b54094e01ccd3Andy McFadden const sp<IGraphicBufferProducer>& bufferProducer) const 128134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis { 129134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis Parcel data, reply; 130134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis int err = NO_ERROR; 131134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis err = data.writeInterfaceToken( 132134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis ISurfaceComposer::getInterfaceDescriptor()); 133134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis if (err != NO_ERROR) { 134e6f43ddce78d6846af12550ff9193c5c6fe5844bSteve Block ALOGE("ISurfaceComposer::authenticateSurfaceTexture: error writing " 135134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis "interface descriptor: %s (%d)", strerror(-err), -err); 136134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis return false; 137134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis } 1382ea926bda2fa30f3ba8d0ed2d2395a8ada952e6eMarco Nelissen err = data.writeStrongBinder(IInterface::asBinder(bufferProducer)); 139134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis if (err != NO_ERROR) { 140e6f43ddce78d6846af12550ff9193c5c6fe5844bSteve Block ALOGE("ISurfaceComposer::authenticateSurfaceTexture: error writing " 141582270d69db94286a248bd829f1ae6f910d45124Jamie Gennis "strong binder to parcel: %s (%d)", strerror(-err), -err); 142134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis return false; 143134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis } 144134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis err = remote()->transact(BnSurfaceComposer::AUTHENTICATE_SURFACE, data, 145134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis &reply); 146134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis if (err != NO_ERROR) { 147e6f43ddce78d6846af12550ff9193c5c6fe5844bSteve Block ALOGE("ISurfaceComposer::authenticateSurfaceTexture: error " 148582270d69db94286a248bd829f1ae6f910d45124Jamie Gennis "performing transaction: %s (%d)", strerror(-err), -err); 149134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis return false; 150134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis } 151134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis int32_t result = 0; 152134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis err = reply.readInt32(&result); 153134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis if (err != NO_ERROR) { 154e6f43ddce78d6846af12550ff9193c5c6fe5844bSteve Block ALOGE("ISurfaceComposer::authenticateSurfaceTexture: error " 155582270d69db94286a248bd829f1ae6f910d45124Jamie Gennis "retrieving result: %s (%d)", strerror(-err), -err); 156134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis return false; 157134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis } 158134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis return result != 0; 159134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis } 160d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian 161d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian virtual sp<IDisplayEventConnection> createDisplayEventConnection() 162d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian { 163d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian Parcel data, reply; 164d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian sp<IDisplayEventConnection> result; 165d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian int err = data.writeInterfaceToken( 166d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian ISurfaceComposer::getInterfaceDescriptor()); 167d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian if (err != NO_ERROR) { 168d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian return result; 169d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian } 170d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian err = remote()->transact( 171d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian BnSurfaceComposer::CREATE_DISPLAY_EVENT_CONNECTION, 172d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian data, &reply); 173d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian if (err != NO_ERROR) { 174e6f43ddce78d6846af12550ff9193c5c6fe5844bSteve Block ALOGE("ISurfaceComposer::createDisplayEventConnection: error performing " 175d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian "transaction: %s (%d)", strerror(-err), -err); 176d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian return result; 177d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian } 178d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian result = interface_cast<IDisplayEventConnection>(reply.readStrongBinder()); 179d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian return result; 180d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian } 1818e533069e5721e55cb9768e140e16546c3a4a8b6Colin Cross 182dd3cb84cfbe8068790c6233b5829fae9c4a0ee93Jamie Gennis virtual sp<IBinder> createDisplay(const String8& displayName, bool secure) 183e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian { 184e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian Parcel data, reply; 185e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian data.writeInterfaceToken(ISurfaceComposer::getInterfaceDescriptor()); 1868dfa92fef9759a881e96ee58d59875d35023aab9Andy McFadden data.writeString8(displayName); 187dd3cb84cfbe8068790c6233b5829fae9c4a0ee93Jamie Gennis data.writeInt32(secure ? 1 : 0); 188e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian remote()->transact(BnSurfaceComposer::CREATE_DISPLAY, data, &reply); 189e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian return reply.readStrongBinder(); 190e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian } 191e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian 1926c913be9ca95fd6b556d056e165a4ba6dc69795bJesse Hall virtual void destroyDisplay(const sp<IBinder>& display) 1936c913be9ca95fd6b556d056e165a4ba6dc69795bJesse Hall { 1946c913be9ca95fd6b556d056e165a4ba6dc69795bJesse Hall Parcel data, reply; 1956c913be9ca95fd6b556d056e165a4ba6dc69795bJesse Hall data.writeInterfaceToken(ISurfaceComposer::getInterfaceDescriptor()); 1966c913be9ca95fd6b556d056e165a4ba6dc69795bJesse Hall data.writeStrongBinder(display); 1976c913be9ca95fd6b556d056e165a4ba6dc69795bJesse Hall remote()->transact(BnSurfaceComposer::DESTROY_DISPLAY, data, &reply); 1986c913be9ca95fd6b556d056e165a4ba6dc69795bJesse Hall } 1996c913be9ca95fd6b556d056e165a4ba6dc69795bJesse Hall 200e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian virtual sp<IBinder> getBuiltInDisplay(int32_t id) 201e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian { 202e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian Parcel data, reply; 203e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian data.writeInterfaceToken(ISurfaceComposer::getInterfaceDescriptor()); 204e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian data.writeInt32(id); 205e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian remote()->transact(BnSurfaceComposer::GET_BUILT_IN_DISPLAY, data, &reply); 206e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian return reply.readStrongBinder(); 207e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian } 208e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian 2092c9b11f0291210c9b9513a1a0cce6afebd361b3bPrashant Malani virtual void setPowerMode(const sp<IBinder>& display, int mode) 2108e533069e5721e55cb9768e140e16546c3a4a8b6Colin Cross { 2118e533069e5721e55cb9768e140e16546c3a4a8b6Colin Cross Parcel data, reply; 2128e533069e5721e55cb9768e140e16546c3a4a8b6Colin Cross data.writeInterfaceToken(ISurfaceComposer::getInterfaceDescriptor()); 213c01a79d77b829e7de86ef137694e8ad708470ca1Andy McFadden data.writeStrongBinder(display); 2142c9b11f0291210c9b9513a1a0cce6afebd361b3bPrashant Malani data.writeInt32(mode); 2152c9b11f0291210c9b9513a1a0cce6afebd361b3bPrashant Malani remote()->transact(BnSurfaceComposer::SET_POWER_MODE, data, &reply); 2168e533069e5721e55cb9768e140e16546c3a4a8b6Colin Cross } 2173094df359d1e6e2ae8ca4e935cc093f563804c96Mathias Agopian 2187f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza virtual status_t getDisplayConfigs(const sp<IBinder>& display, 2197f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza Vector<DisplayInfo>* configs) 220c666cae2d5995097ec49a87e375e2afdd92802b7Mathias Agopian { 221c666cae2d5995097ec49a87e375e2afdd92802b7Mathias Agopian Parcel data, reply; 222c666cae2d5995097ec49a87e375e2afdd92802b7Mathias Agopian data.writeInterfaceToken(ISurfaceComposer::getInterfaceDescriptor()); 2239d4e3d2f42e93e2d12bacabe97d307d30c3c20ddJeff Brown data.writeStrongBinder(display); 2247f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza remote()->transact(BnSurfaceComposer::GET_DISPLAY_CONFIGS, data, &reply); 2257f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza status_t result = reply.readInt32(); 2267f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza if (result == NO_ERROR) { 227d723bd7669b4fc88dc282d8bf8ba5ecb2849d22fDan Stoza size_t numConfigs = reply.readUint32(); 2287f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza configs->clear(); 2297f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza configs->resize(numConfigs); 2307f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza for (size_t c = 0; c < numConfigs; ++c) { 2317f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza memcpy(&(configs->editItemAt(c)), 2327f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza reply.readInplace(sizeof(DisplayInfo)), 2337f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza sizeof(DisplayInfo)); 2347f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza } 2357f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza } 2367f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza return result; 2377f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza } 2387f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza 23967d8bd66aaf04805cb8f2616ba964141b865e3b9Lajos Molnar virtual status_t getDisplayStats(const sp<IBinder>& display, 24067d8bd66aaf04805cb8f2616ba964141b865e3b9Lajos Molnar DisplayStatInfo* stats) 24167d8bd66aaf04805cb8f2616ba964141b865e3b9Lajos Molnar { 24267d8bd66aaf04805cb8f2616ba964141b865e3b9Lajos Molnar Parcel data, reply; 24367d8bd66aaf04805cb8f2616ba964141b865e3b9Lajos Molnar data.writeInterfaceToken(ISurfaceComposer::getInterfaceDescriptor()); 24467d8bd66aaf04805cb8f2616ba964141b865e3b9Lajos Molnar data.writeStrongBinder(display); 24567d8bd66aaf04805cb8f2616ba964141b865e3b9Lajos Molnar remote()->transact(BnSurfaceComposer::GET_DISPLAY_STATS, data, &reply); 24667d8bd66aaf04805cb8f2616ba964141b865e3b9Lajos Molnar status_t result = reply.readInt32(); 24767d8bd66aaf04805cb8f2616ba964141b865e3b9Lajos Molnar if (result == NO_ERROR) { 24867d8bd66aaf04805cb8f2616ba964141b865e3b9Lajos Molnar memcpy(stats, 24967d8bd66aaf04805cb8f2616ba964141b865e3b9Lajos Molnar reply.readInplace(sizeof(DisplayStatInfo)), 25067d8bd66aaf04805cb8f2616ba964141b865e3b9Lajos Molnar sizeof(DisplayStatInfo)); 25167d8bd66aaf04805cb8f2616ba964141b865e3b9Lajos Molnar } 25267d8bd66aaf04805cb8f2616ba964141b865e3b9Lajos Molnar return result; 25367d8bd66aaf04805cb8f2616ba964141b865e3b9Lajos Molnar } 25467d8bd66aaf04805cb8f2616ba964141b865e3b9Lajos Molnar 2557f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza virtual int getActiveConfig(const sp<IBinder>& display) 2567f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza { 2577f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza Parcel data, reply; 2587f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza data.writeInterfaceToken(ISurfaceComposer::getInterfaceDescriptor()); 2597f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza data.writeStrongBinder(display); 2607f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza remote()->transact(BnSurfaceComposer::GET_ACTIVE_CONFIG, data, &reply); 2617f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza return reply.readInt32(); 2627f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza } 2637f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza 2647f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza virtual status_t setActiveConfig(const sp<IBinder>& display, int id) 2657f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza { 2667f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza Parcel data, reply; 2677f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza data.writeInterfaceToken(ISurfaceComposer::getInterfaceDescriptor()); 2687f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza data.writeStrongBinder(display); 2697f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza data.writeInt32(id); 2707f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza remote()->transact(BnSurfaceComposer::SET_ACTIVE_CONFIG, data, &reply); 271c666cae2d5995097ec49a87e375e2afdd92802b7Mathias Agopian return reply.readInt32(); 272c666cae2d5995097ec49a87e375e2afdd92802b7Mathias Agopian } 273d85084b2b65828442eafaff9b811e9b6c9ca9fadSvetoslav 27428f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright virtual status_t getDisplayColorModes(const sp<IBinder>& display, 27528f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright Vector<android_color_mode_t>* outColorModes) { 27628f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright Parcel data, reply; 27728f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright status_t result = data.writeInterfaceToken(ISurfaceComposer::getInterfaceDescriptor()); 27828f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright if (result != NO_ERROR) { 27928f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright ALOGE("getDisplayColorModes failed to writeInterfaceToken: %d", result); 28028f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright return result; 28128f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright } 28228f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright result = data.writeStrongBinder(display); 28328f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright if (result != NO_ERROR) { 28428f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright ALOGE("getDisplayColorModes failed to writeStrongBinder: %d", result); 28528f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright return result; 28628f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright } 28728f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright result = remote()->transact(BnSurfaceComposer::GET_DISPLAY_COLOR_MODES, data, &reply); 28828f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright if (result != NO_ERROR) { 28928f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright ALOGE("getDisplayColorModes failed to transact: %d", result); 29028f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright return result; 29128f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright } 29228f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright result = static_cast<status_t>(reply.readInt32()); 29328f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright if (result == NO_ERROR) { 29428f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright size_t numModes = reply.readUint32(); 29528f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright outColorModes->clear(); 29628f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright outColorModes->resize(numModes); 29728f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright for (size_t i = 0; i < numModes; ++i) { 29828f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright outColorModes->replaceAt(static_cast<android_color_mode_t>(reply.readInt32()), i); 29928f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright } 30028f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright } 30128f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright return result; 30228f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright } 30328f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright 30428f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright virtual android_color_mode_t getActiveColorMode(const sp<IBinder>& display) { 30528f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright Parcel data, reply; 30628f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright status_t result = data.writeInterfaceToken(ISurfaceComposer::getInterfaceDescriptor()); 30728f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright if (result != NO_ERROR) { 30828f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright ALOGE("getActiveColorMode failed to writeInterfaceToken: %d", result); 30928f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright return static_cast<android_color_mode_t>(result); 31028f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright } 31128f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright result = data.writeStrongBinder(display); 31228f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright if (result != NO_ERROR) { 31328f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright ALOGE("getActiveColorMode failed to writeStrongBinder: %d", result); 31428f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright return static_cast<android_color_mode_t>(result); 31528f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright } 31628f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright result = remote()->transact(BnSurfaceComposer::GET_ACTIVE_COLOR_MODE, data, &reply); 31728f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright if (result != NO_ERROR) { 31828f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright ALOGE("getActiveColorMode failed to transact: %d", result); 31928f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright return static_cast<android_color_mode_t>(result); 32028f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright } 32128f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright return static_cast<android_color_mode_t>(reply.readInt32()); 32228f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright } 32328f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright 32428f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright virtual status_t setActiveColorMode(const sp<IBinder>& display, 32528f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright android_color_mode_t colorMode) { 32628f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright Parcel data, reply; 32728f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright status_t result = data.writeInterfaceToken(ISurfaceComposer::getInterfaceDescriptor()); 32828f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright if (result != NO_ERROR) { 32928f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright ALOGE("setActiveColorMode failed to writeInterfaceToken: %d", result); 33028f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright return result; 33128f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright } 33228f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright result = data.writeStrongBinder(display); 33328f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright if (result != NO_ERROR) { 33428f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright ALOGE("setActiveColorMode failed to writeStrongBinder: %d", result); 33528f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright return result; 33628f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright } 33728f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright result = data.writeInt32(colorMode); 33828f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright if (result != NO_ERROR) { 33928f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright ALOGE("setActiveColorMode failed to writeInt32: %d", result); 34028f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright return result; 34128f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright } 34228f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright result = remote()->transact(BnSurfaceComposer::SET_ACTIVE_COLOR_MODE, data, &reply); 34328f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright if (result != NO_ERROR) { 34428f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright ALOGE("setActiveColorMode failed to transact: %d", result); 34528f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright return result; 34628f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright } 34728f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright return static_cast<status_t>(reply.readInt32()); 34828f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright } 34928f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright 350d85084b2b65828442eafaff9b811e9b6c9ca9fadSvetoslav virtual status_t clearAnimationFrameStats() { 351d85084b2b65828442eafaff9b811e9b6c9ca9fadSvetoslav Parcel data, reply; 352d85084b2b65828442eafaff9b811e9b6c9ca9fadSvetoslav data.writeInterfaceToken(ISurfaceComposer::getInterfaceDescriptor()); 353d85084b2b65828442eafaff9b811e9b6c9ca9fadSvetoslav remote()->transact(BnSurfaceComposer::CLEAR_ANIMATION_FRAME_STATS, data, &reply); 354d85084b2b65828442eafaff9b811e9b6c9ca9fadSvetoslav return reply.readInt32(); 355d85084b2b65828442eafaff9b811e9b6c9ca9fadSvetoslav } 356d85084b2b65828442eafaff9b811e9b6c9ca9fadSvetoslav 357d85084b2b65828442eafaff9b811e9b6c9ca9fadSvetoslav virtual status_t getAnimationFrameStats(FrameStats* outStats) const { 358d85084b2b65828442eafaff9b811e9b6c9ca9fadSvetoslav Parcel data, reply; 359d85084b2b65828442eafaff9b811e9b6c9ca9fadSvetoslav data.writeInterfaceToken(ISurfaceComposer::getInterfaceDescriptor()); 360d85084b2b65828442eafaff9b811e9b6c9ca9fadSvetoslav remote()->transact(BnSurfaceComposer::GET_ANIMATION_FRAME_STATS, data, &reply); 361d85084b2b65828442eafaff9b811e9b6c9ca9fadSvetoslav reply.read(*outStats); 362d85084b2b65828442eafaff9b811e9b6c9ca9fadSvetoslav return reply.readInt32(); 363d85084b2b65828442eafaff9b811e9b6c9ca9fadSvetoslav } 364c4f471e75a8ec64ec34e3f2944a5a756215d0becDan Stoza 365c4f471e75a8ec64ec34e3f2944a5a756215d0becDan Stoza virtual status_t getHdrCapabilities(const sp<IBinder>& display, 366c4f471e75a8ec64ec34e3f2944a5a756215d0becDan Stoza HdrCapabilities* outCapabilities) const { 367c4f471e75a8ec64ec34e3f2944a5a756215d0becDan Stoza Parcel data, reply; 368c4f471e75a8ec64ec34e3f2944a5a756215d0becDan Stoza data.writeInterfaceToken(ISurfaceComposer::getInterfaceDescriptor()); 369c4f471e75a8ec64ec34e3f2944a5a756215d0becDan Stoza status_t result = data.writeStrongBinder(display); 370c4f471e75a8ec64ec34e3f2944a5a756215d0becDan Stoza if (result != NO_ERROR) { 371c4f471e75a8ec64ec34e3f2944a5a756215d0becDan Stoza ALOGE("getHdrCapabilities failed to writeStrongBinder: %d", result); 372c4f471e75a8ec64ec34e3f2944a5a756215d0becDan Stoza return result; 373c4f471e75a8ec64ec34e3f2944a5a756215d0becDan Stoza } 374c4f471e75a8ec64ec34e3f2944a5a756215d0becDan Stoza result = remote()->transact(BnSurfaceComposer::GET_HDR_CAPABILITIES, 375c4f471e75a8ec64ec34e3f2944a5a756215d0becDan Stoza data, &reply); 376c4f471e75a8ec64ec34e3f2944a5a756215d0becDan Stoza if (result != NO_ERROR) { 377c4f471e75a8ec64ec34e3f2944a5a756215d0becDan Stoza ALOGE("getHdrCapabilities failed to transact: %d", result); 378c4f471e75a8ec64ec34e3f2944a5a756215d0becDan Stoza return result; 379c4f471e75a8ec64ec34e3f2944a5a756215d0becDan Stoza } 380c4f471e75a8ec64ec34e3f2944a5a756215d0becDan Stoza result = reply.readInt32(); 381c4f471e75a8ec64ec34e3f2944a5a756215d0becDan Stoza if (result == NO_ERROR) { 382c4f471e75a8ec64ec34e3f2944a5a756215d0becDan Stoza result = reply.readParcelable(outCapabilities); 383c4f471e75a8ec64ec34e3f2944a5a756215d0becDan Stoza } 384c4f471e75a8ec64ec34e3f2944a5a756215d0becDan Stoza return result; 385c4f471e75a8ec64ec34e3f2944a5a756215d0becDan Stoza } 386edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; 387edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 388d723bd7669b4fc88dc282d8bf8ba5ecb2849d22fDan Stoza// Out-of-line virtual method definition to trigger vtable emission in this 389d723bd7669b4fc88dc282d8bf8ba5ecb2849d22fDan Stoza// translation unit (see clang warning -Wweak-vtables) 390d723bd7669b4fc88dc282d8bf8ba5ecb2849d22fDan StozaBpSurfaceComposer::~BpSurfaceComposer() {} 391d723bd7669b4fc88dc282d8bf8ba5ecb2849d22fDan Stoza 392edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectIMPLEMENT_META_INTERFACE(SurfaceComposer, "android.ui.ISurfaceComposer"); 393edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 394edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ---------------------------------------------------------------------- 395edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 396edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectstatus_t BnSurfaceComposer::onTransact( 397edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags) 398edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 399edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project switch(code) { 400edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project case CREATE_CONNECTION: { 40183c0446f27b9542d6c2e724817b2b2d8d1f55085Mathias Agopian CHECK_INTERFACE(ISurfaceComposer, data, reply); 4022ea926bda2fa30f3ba8d0ed2d2395a8ada952e6eMarco Nelissen sp<IBinder> b = IInterface::asBinder(createConnection()); 403edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project reply->writeStrongBinder(b); 4046c913be9ca95fd6b556d056e165a4ba6dc69795bJesse Hall return NO_ERROR; 4056c913be9ca95fd6b556d056e165a4ba6dc69795bJesse Hall } 4069a78c90cd46b2a3bd637b056873149d3b94384b4Jamie Gennis case CREATE_GRAPHIC_BUFFER_ALLOC: { 4079a78c90cd46b2a3bd637b056873149d3b94384b4Jamie Gennis CHECK_INTERFACE(ISurfaceComposer, data, reply); 4082ea926bda2fa30f3ba8d0ed2d2395a8ada952e6eMarco Nelissen sp<IBinder> b = IInterface::asBinder(createGraphicBufferAlloc()); 4099a78c90cd46b2a3bd637b056873149d3b94384b4Jamie Gennis reply->writeStrongBinder(b); 4106c913be9ca95fd6b556d056e165a4ba6dc69795bJesse Hall return NO_ERROR; 4116c913be9ca95fd6b556d056e165a4ba6dc69795bJesse Hall } 412698c0873cf2e07bdc7fd1e72169aee2a19fa40d7Mathias Agopian case SET_TRANSACTION_STATE: { 41383c0446f27b9542d6c2e724817b2b2d8d1f55085Mathias Agopian CHECK_INTERFACE(ISurfaceComposer, data, reply); 414d723bd7669b4fc88dc282d8bf8ba5ecb2849d22fDan Stoza 415d723bd7669b4fc88dc282d8bf8ba5ecb2849d22fDan Stoza size_t count = data.readUint32(); 4168afa1c4ab86d724feb7716e153b7835385534590Michael Lentine if (count > data.dataSize()) { 4178afa1c4ab86d724feb7716e153b7835385534590Michael Lentine return BAD_VALUE; 4188afa1c4ab86d724feb7716e153b7835385534590Michael Lentine } 419698c0873cf2e07bdc7fd1e72169aee2a19fa40d7Mathias Agopian ComposerState s; 420698c0873cf2e07bdc7fd1e72169aee2a19fa40d7Mathias Agopian Vector<ComposerState> state; 421698c0873cf2e07bdc7fd1e72169aee2a19fa40d7Mathias Agopian state.setCapacity(count); 422d723bd7669b4fc88dc282d8bf8ba5ecb2849d22fDan Stoza for (size_t i = 0; i < count; i++) { 4238afa1c4ab86d724feb7716e153b7835385534590Michael Lentine if (s.read(data) == BAD_VALUE) { 4248afa1c4ab86d724feb7716e153b7835385534590Michael Lentine return BAD_VALUE; 4258afa1c4ab86d724feb7716e153b7835385534590Michael Lentine } 426698c0873cf2e07bdc7fd1e72169aee2a19fa40d7Mathias Agopian state.add(s); 427698c0873cf2e07bdc7fd1e72169aee2a19fa40d7Mathias Agopian } 428d723bd7669b4fc88dc282d8bf8ba5ecb2849d22fDan Stoza 429d723bd7669b4fc88dc282d8bf8ba5ecb2849d22fDan Stoza count = data.readUint32(); 4308afa1c4ab86d724feb7716e153b7835385534590Michael Lentine if (count > data.dataSize()) { 4318afa1c4ab86d724feb7716e153b7835385534590Michael Lentine return BAD_VALUE; 4328afa1c4ab86d724feb7716e153b7835385534590Michael Lentine } 4338b33f032327f8de0dcc0e6d0d43ed80f834b51f6Mathias Agopian DisplayState d; 4348b33f032327f8de0dcc0e6d0d43ed80f834b51f6Mathias Agopian Vector<DisplayState> displays; 4358b33f032327f8de0dcc0e6d0d43ed80f834b51f6Mathias Agopian displays.setCapacity(count); 436d723bd7669b4fc88dc282d8bf8ba5ecb2849d22fDan Stoza for (size_t i = 0; i < count; i++) { 4378afa1c4ab86d724feb7716e153b7835385534590Michael Lentine if (d.read(data) == BAD_VALUE) { 4388afa1c4ab86d724feb7716e153b7835385534590Michael Lentine return BAD_VALUE; 4398afa1c4ab86d724feb7716e153b7835385534590Michael Lentine } 4408b33f032327f8de0dcc0e6d0d43ed80f834b51f6Mathias Agopian displays.add(d); 4418b33f032327f8de0dcc0e6d0d43ed80f834b51f6Mathias Agopian } 442d723bd7669b4fc88dc282d8bf8ba5ecb2849d22fDan Stoza 443d723bd7669b4fc88dc282d8bf8ba5ecb2849d22fDan Stoza uint32_t stateFlags = data.readUint32(); 444d723bd7669b4fc88dc282d8bf8ba5ecb2849d22fDan Stoza setTransactionState(state, displays, stateFlags); 4456c913be9ca95fd6b556d056e165a4ba6dc69795bJesse Hall return NO_ERROR; 4466c913be9ca95fd6b556d056e165a4ba6dc69795bJesse Hall } 447edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project case BOOT_FINISHED: { 44883c0446f27b9542d6c2e724817b2b2d8d1f55085Mathias Agopian CHECK_INTERFACE(ISurfaceComposer, data, reply); 449edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project bootFinished(); 4506c913be9ca95fd6b556d056e165a4ba6dc69795bJesse Hall return NO_ERROR; 4516c913be9ca95fd6b556d056e165a4ba6dc69795bJesse Hall } 4522a9fc493dfdba67108e4335bb1fe931bc1e2a025Mathias Agopian case CAPTURE_SCREEN: { 4532a9fc493dfdba67108e4335bb1fe931bc1e2a025Mathias Agopian CHECK_INTERFACE(ISurfaceComposer, data, reply); 4542a9fc493dfdba67108e4335bb1fe931bc1e2a025Mathias Agopian sp<IBinder> display = data.readStrongBinder(); 4552a9fc493dfdba67108e4335bb1fe931bc1e2a025Mathias Agopian sp<IGraphicBufferProducer> producer = 4562a9fc493dfdba67108e4335bb1fe931bc1e2a025Mathias Agopian interface_cast<IGraphicBufferProducer>(data.readStrongBinder()); 45760d6922a011fe18c111b8d30fb6ef1f655b6b15ePablo Ceballos Rect sourceCrop(Rect::EMPTY_RECT); 458c18790018be5d7ea7061ccbc81f3044e74adc823Dan Stoza data.read(sourceCrop); 459d723bd7669b4fc88dc282d8bf8ba5ecb2849d22fDan Stoza uint32_t reqWidth = data.readUint32(); 460d723bd7669b4fc88dc282d8bf8ba5ecb2849d22fDan Stoza uint32_t reqHeight = data.readUint32(); 461d723bd7669b4fc88dc282d8bf8ba5ecb2849d22fDan Stoza uint32_t minLayerZ = data.readUint32(); 462d723bd7669b4fc88dc282d8bf8ba5ecb2849d22fDan Stoza uint32_t maxLayerZ = data.readUint32(); 463c701401f8cec2e5309f8b57e2b97baced5093274Dan Stoza bool useIdentityTransform = static_cast<bool>(data.readInt32()); 464d723bd7669b4fc88dc282d8bf8ba5ecb2849d22fDan Stoza int32_t rotation = data.readInt32(); 465c701401f8cec2e5309f8b57e2b97baced5093274Dan Stoza 4662a9fc493dfdba67108e4335bb1fe931bc1e2a025Mathias Agopian status_t res = captureScreen(display, producer, 467c18790018be5d7ea7061ccbc81f3044e74adc823Dan Stoza sourceCrop, reqWidth, reqHeight, minLayerZ, maxLayerZ, 468c3ebe66b49cfba035e1fd0e160a13db38eb81b0eRiley Andrews useIdentityTransform, 469c3ebe66b49cfba035e1fd0e160a13db38eb81b0eRiley Andrews static_cast<ISurfaceComposer::Rotation>(rotation)); 4702a9fc493dfdba67108e4335bb1fe931bc1e2a025Mathias Agopian reply->writeInt32(res); 4716c913be9ca95fd6b556d056e165a4ba6dc69795bJesse Hall return NO_ERROR; 4726c913be9ca95fd6b556d056e165a4ba6dc69795bJesse Hall } 473134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis case AUTHENTICATE_SURFACE: { 474134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis CHECK_INTERFACE(ISurfaceComposer, data, reply); 4752adaf04fab35cf47c824d74d901b54094e01ccd3Andy McFadden sp<IGraphicBufferProducer> bufferProducer = 4762adaf04fab35cf47c824d74d901b54094e01ccd3Andy McFadden interface_cast<IGraphicBufferProducer>(data.readStrongBinder()); 4772adaf04fab35cf47c824d74d901b54094e01ccd3Andy McFadden int32_t result = authenticateSurfaceTexture(bufferProducer) ? 1 : 0; 478134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis reply->writeInt32(result); 4796c913be9ca95fd6b556d056e165a4ba6dc69795bJesse Hall return NO_ERROR; 4806c913be9ca95fd6b556d056e165a4ba6dc69795bJesse Hall } 481d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian case CREATE_DISPLAY_EVENT_CONNECTION: { 482d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian CHECK_INTERFACE(ISurfaceComposer, data, reply); 483d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian sp<IDisplayEventConnection> connection(createDisplayEventConnection()); 4842ea926bda2fa30f3ba8d0ed2d2395a8ada952e6eMarco Nelissen reply->writeStrongBinder(IInterface::asBinder(connection)); 485d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian return NO_ERROR; 4866c913be9ca95fd6b556d056e165a4ba6dc69795bJesse Hall } 487e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian case CREATE_DISPLAY: { 488e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian CHECK_INTERFACE(ISurfaceComposer, data, reply); 4898dfa92fef9759a881e96ee58d59875d35023aab9Andy McFadden String8 displayName = data.readString8(); 490dd3cb84cfbe8068790c6233b5829fae9c4a0ee93Jamie Gennis bool secure = bool(data.readInt32()); 491dd3cb84cfbe8068790c6233b5829fae9c4a0ee93Jamie Gennis sp<IBinder> display(createDisplay(displayName, secure)); 492e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian reply->writeStrongBinder(display); 493e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian return NO_ERROR; 4946c913be9ca95fd6b556d056e165a4ba6dc69795bJesse Hall } 4956c913be9ca95fd6b556d056e165a4ba6dc69795bJesse Hall case DESTROY_DISPLAY: { 4966c913be9ca95fd6b556d056e165a4ba6dc69795bJesse Hall CHECK_INTERFACE(ISurfaceComposer, data, reply); 4976c913be9ca95fd6b556d056e165a4ba6dc69795bJesse Hall sp<IBinder> display = data.readStrongBinder(); 4986c913be9ca95fd6b556d056e165a4ba6dc69795bJesse Hall destroyDisplay(display); 4996c913be9ca95fd6b556d056e165a4ba6dc69795bJesse Hall return NO_ERROR; 5006c913be9ca95fd6b556d056e165a4ba6dc69795bJesse Hall } 501e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian case GET_BUILT_IN_DISPLAY: { 502e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian CHECK_INTERFACE(ISurfaceComposer, data, reply); 503e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian int32_t id = data.readInt32(); 504e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian sp<IBinder> display(getBuiltInDisplay(id)); 505e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian reply->writeStrongBinder(display); 506e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian return NO_ERROR; 5076c913be9ca95fd6b556d056e165a4ba6dc69795bJesse Hall } 5087f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza case GET_DISPLAY_CONFIGS: { 5097f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza CHECK_INTERFACE(ISurfaceComposer, data, reply); 5107f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza Vector<DisplayInfo> configs; 5117f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza sp<IBinder> display = data.readStrongBinder(); 5127f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza status_t result = getDisplayConfigs(display, &configs); 5137f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza reply->writeInt32(result); 5147f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza if (result == NO_ERROR) { 515d723bd7669b4fc88dc282d8bf8ba5ecb2849d22fDan Stoza reply->writeUint32(static_cast<uint32_t>(configs.size())); 5167f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza for (size_t c = 0; c < configs.size(); ++c) { 5177f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza memcpy(reply->writeInplace(sizeof(DisplayInfo)), 5187f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza &configs[c], sizeof(DisplayInfo)); 5197f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza } 5207f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza } 5217f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza return NO_ERROR; 5227f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza } 52367d8bd66aaf04805cb8f2616ba964141b865e3b9Lajos Molnar case GET_DISPLAY_STATS: { 52467d8bd66aaf04805cb8f2616ba964141b865e3b9Lajos Molnar CHECK_INTERFACE(ISurfaceComposer, data, reply); 52567d8bd66aaf04805cb8f2616ba964141b865e3b9Lajos Molnar DisplayStatInfo stats; 52667d8bd66aaf04805cb8f2616ba964141b865e3b9Lajos Molnar sp<IBinder> display = data.readStrongBinder(); 52767d8bd66aaf04805cb8f2616ba964141b865e3b9Lajos Molnar status_t result = getDisplayStats(display, &stats); 52867d8bd66aaf04805cb8f2616ba964141b865e3b9Lajos Molnar reply->writeInt32(result); 52967d8bd66aaf04805cb8f2616ba964141b865e3b9Lajos Molnar if (result == NO_ERROR) { 53067d8bd66aaf04805cb8f2616ba964141b865e3b9Lajos Molnar memcpy(reply->writeInplace(sizeof(DisplayStatInfo)), 53167d8bd66aaf04805cb8f2616ba964141b865e3b9Lajos Molnar &stats, sizeof(DisplayStatInfo)); 53267d8bd66aaf04805cb8f2616ba964141b865e3b9Lajos Molnar } 53367d8bd66aaf04805cb8f2616ba964141b865e3b9Lajos Molnar return NO_ERROR; 53467d8bd66aaf04805cb8f2616ba964141b865e3b9Lajos Molnar } 5357f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza case GET_ACTIVE_CONFIG: { 5367f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza CHECK_INTERFACE(ISurfaceComposer, data, reply); 5377f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza sp<IBinder> display = data.readStrongBinder(); 5387f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza int id = getActiveConfig(display); 5397f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza reply->writeInt32(id); 5407f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza return NO_ERROR; 5417f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza } 5427f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza case SET_ACTIVE_CONFIG: { 543c666cae2d5995097ec49a87e375e2afdd92802b7Mathias Agopian CHECK_INTERFACE(ISurfaceComposer, data, reply); 5449d4e3d2f42e93e2d12bacabe97d307d30c3c20ddJeff Brown sp<IBinder> display = data.readStrongBinder(); 5457f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza int id = data.readInt32(); 5467f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza status_t result = setActiveConfig(display, id); 547c666cae2d5995097ec49a87e375e2afdd92802b7Mathias Agopian reply->writeInt32(result); 5486c913be9ca95fd6b556d056e165a4ba6dc69795bJesse Hall return NO_ERROR; 5496c913be9ca95fd6b556d056e165a4ba6dc69795bJesse Hall } 55028f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright case GET_DISPLAY_COLOR_MODES: { 55128f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright CHECK_INTERFACE(ISurfaceComposer, data, reply); 55228f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright Vector<android_color_mode_t> colorModes; 55328f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright sp<IBinder> display = nullptr; 55428f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright status_t result = data.readStrongBinder(&display); 55528f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright if (result != NO_ERROR) { 55628f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright ALOGE("getDisplayColorModes failed to readStrongBinder: %d", result); 55728f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright return result; 55828f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright } 55928f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright result = getDisplayColorModes(display, &colorModes); 56028f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright reply->writeInt32(result); 56128f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright if (result == NO_ERROR) { 56228f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright reply->writeUint32(static_cast<uint32_t>(colorModes.size())); 56328f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright for (size_t i = 0; i < colorModes.size(); ++i) { 56428f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright reply->writeInt32(colorModes[i]); 56528f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright } 56628f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright } 56728f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright return NO_ERROR; 56828f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright } 56928f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright case GET_ACTIVE_COLOR_MODE: { 57028f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright CHECK_INTERFACE(ISurfaceComposer, data, reply); 57128f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright sp<IBinder> display = nullptr; 57228f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright status_t result = data.readStrongBinder(&display); 57328f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright if (result != NO_ERROR) { 57428f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright ALOGE("getActiveColorMode failed to readStrongBinder: %d", result); 57528f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright return result; 57628f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright } 57728f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright android_color_mode_t colorMode = getActiveColorMode(display); 57828f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright result = reply->writeInt32(static_cast<int32_t>(colorMode)); 57928f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright return result; 58028f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright } 58128f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright case SET_ACTIVE_COLOR_MODE: { 58228f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright CHECK_INTERFACE(ISurfaceComposer, data, reply); 58328f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright sp<IBinder> display = nullptr; 58428f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright status_t result = data.readStrongBinder(&display); 58528f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright if (result != NO_ERROR) { 58628f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright ALOGE("getActiveColorMode failed to readStrongBinder: %d", result); 58728f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright return result; 58828f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright } 58928f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright int32_t colorModeInt = 0; 59028f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright result = data.readInt32(&colorModeInt); 59128f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright if (result != NO_ERROR) { 59228f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright ALOGE("setActiveColorMode failed to readInt32: %d", result); 59328f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright return result; 59428f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright } 59528f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright result = setActiveColorMode(display, 59628f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright static_cast<android_color_mode_t>(colorModeInt)); 59728f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright result = reply->writeInt32(result); 59828f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright return result; 59928f24d0ab481bd9c6fd5618414fee694e837c5c6Michael Wright } 600d85084b2b65828442eafaff9b811e9b6c9ca9fadSvetoslav case CLEAR_ANIMATION_FRAME_STATS: { 601d85084b2b65828442eafaff9b811e9b6c9ca9fadSvetoslav CHECK_INTERFACE(ISurfaceComposer, data, reply); 602d85084b2b65828442eafaff9b811e9b6c9ca9fadSvetoslav status_t result = clearAnimationFrameStats(); 603d85084b2b65828442eafaff9b811e9b6c9ca9fadSvetoslav reply->writeInt32(result); 604d85084b2b65828442eafaff9b811e9b6c9ca9fadSvetoslav return NO_ERROR; 605d85084b2b65828442eafaff9b811e9b6c9ca9fadSvetoslav } 606d85084b2b65828442eafaff9b811e9b6c9ca9fadSvetoslav case GET_ANIMATION_FRAME_STATS: { 607d85084b2b65828442eafaff9b811e9b6c9ca9fadSvetoslav CHECK_INTERFACE(ISurfaceComposer, data, reply); 608d85084b2b65828442eafaff9b811e9b6c9ca9fadSvetoslav FrameStats stats; 609d85084b2b65828442eafaff9b811e9b6c9ca9fadSvetoslav status_t result = getAnimationFrameStats(&stats); 610d85084b2b65828442eafaff9b811e9b6c9ca9fadSvetoslav reply->write(stats); 611d85084b2b65828442eafaff9b811e9b6c9ca9fadSvetoslav reply->writeInt32(result); 612d85084b2b65828442eafaff9b811e9b6c9ca9fadSvetoslav return NO_ERROR; 613d85084b2b65828442eafaff9b811e9b6c9ca9fadSvetoslav } 6142c9b11f0291210c9b9513a1a0cce6afebd361b3bPrashant Malani case SET_POWER_MODE: { 6152c9b11f0291210c9b9513a1a0cce6afebd361b3bPrashant Malani CHECK_INTERFACE(ISurfaceComposer, data, reply); 6162c9b11f0291210c9b9513a1a0cce6afebd361b3bPrashant Malani sp<IBinder> display = data.readStrongBinder(); 6172c9b11f0291210c9b9513a1a0cce6afebd361b3bPrashant Malani int32_t mode = data.readInt32(); 6182c9b11f0291210c9b9513a1a0cce6afebd361b3bPrashant Malani setPowerMode(display, mode); 6192c9b11f0291210c9b9513a1a0cce6afebd361b3bPrashant Malani return NO_ERROR; 6202c9b11f0291210c9b9513a1a0cce6afebd361b3bPrashant Malani } 621c4f471e75a8ec64ec34e3f2944a5a756215d0becDan Stoza case GET_HDR_CAPABILITIES: { 622c4f471e75a8ec64ec34e3f2944a5a756215d0becDan Stoza CHECK_INTERFACE(ISurfaceComposer, data, reply); 623c4f471e75a8ec64ec34e3f2944a5a756215d0becDan Stoza sp<IBinder> display = nullptr; 624c4f471e75a8ec64ec34e3f2944a5a756215d0becDan Stoza status_t result = data.readStrongBinder(&display); 625c4f471e75a8ec64ec34e3f2944a5a756215d0becDan Stoza if (result != NO_ERROR) { 626c4f471e75a8ec64ec34e3f2944a5a756215d0becDan Stoza ALOGE("getHdrCapabilities failed to readStrongBinder: %d", 627c4f471e75a8ec64ec34e3f2944a5a756215d0becDan Stoza result); 628c4f471e75a8ec64ec34e3f2944a5a756215d0becDan Stoza return result; 629c4f471e75a8ec64ec34e3f2944a5a756215d0becDan Stoza } 630c4f471e75a8ec64ec34e3f2944a5a756215d0becDan Stoza HdrCapabilities capabilities; 631c4f471e75a8ec64ec34e3f2944a5a756215d0becDan Stoza result = getHdrCapabilities(display, &capabilities); 632c4f471e75a8ec64ec34e3f2944a5a756215d0becDan Stoza reply->writeInt32(result); 633c4f471e75a8ec64ec34e3f2944a5a756215d0becDan Stoza if (result == NO_ERROR) { 634c4f471e75a8ec64ec34e3f2944a5a756215d0becDan Stoza reply->writeParcelable(capabilities); 635c4f471e75a8ec64ec34e3f2944a5a756215d0becDan Stoza } 636c4f471e75a8ec64ec34e3f2944a5a756215d0becDan Stoza return NO_ERROR; 637c4f471e75a8ec64ec34e3f2944a5a756215d0becDan Stoza } 6386c913be9ca95fd6b556d056e165a4ba6dc69795bJesse Hall default: { 63983c0446f27b9542d6c2e724817b2b2d8d1f55085Mathias Agopian return BBinder::onTransact(code, data, reply, flags); 6406c913be9ca95fd6b556d056e165a4ba6dc69795bJesse Hall } 641edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project } 642edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 643edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 644edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ---------------------------------------------------------------------------- 645edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 646edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; 647