19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// tag as surfaceflinger 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define LOG_TAG "SurfaceFlinger" 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <stdint.h> 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <sys/types.h> 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 230795272aa226f4e965968a03daddc53ce30b7cdaMathias Agopian#include <binder/Parcel.h> 240795272aa226f4e965968a03daddc53ce30b7cdaMathias Agopian#include <binder/IMemory.h> 250795272aa226f4e965968a03daddc53ce30b7cdaMathias Agopian#include <binder/IPCThreadState.h> 260795272aa226f4e965968a03daddc53ce30b7cdaMathias Agopian#include <binder/IServiceManager.h> 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <ui/DisplayInfo.h> 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 30000479f9e325b4e426a67033abd92d47da412725Mathias Agopian#include <surfaceflinger/ISurfaceComposer.h> 31000479f9e325b4e426a67033abd92d47da412725Mathias Agopian 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// --------------------------------------------------------------------------- 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define LIKELY( exp ) (__builtin_expect( (exp) != 0, true )) 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define UNLIKELY( exp ) (__builtin_expect( (exp) != 0, false )) 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// --------------------------------------------------------------------------- 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectnamespace android { 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass BpSurfaceComposer : public BpInterface<ISurfaceComposer> 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic: 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project BpSurfaceComposer(const sp<IBinder>& impl) 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project : BpInterface<ISurfaceComposer>(impl) 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 49770492cb2b19f6a36ad748cd05fbedfbb9a67dfaMathias Agopian virtual sp<ISurfaceComposerClient> createConnection() 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t n; 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Parcel data, reply; 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data.writeInterfaceToken(ISurfaceComposer::getInterfaceDescriptor()); 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project remote()->transact(BnSurfaceComposer::CREATE_CONNECTION, data, &reply); 55770492cb2b19f6a36ad748cd05fbedfbb9a67dfaMathias Agopian return interface_cast<ISurfaceComposerClient>(reply.readStrongBinder()); 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 587623da435e45c7c03ef6a00a43675deb6645f070Mathias Agopian virtual sp<ISurfaceComposerClient> createClientConnection() 597623da435e45c7c03ef6a00a43675deb6645f070Mathias Agopian { 607623da435e45c7c03ef6a00a43675deb6645f070Mathias Agopian uint32_t n; 617623da435e45c7c03ef6a00a43675deb6645f070Mathias Agopian Parcel data, reply; 627623da435e45c7c03ef6a00a43675deb6645f070Mathias Agopian data.writeInterfaceToken(ISurfaceComposer::getInterfaceDescriptor()); 637623da435e45c7c03ef6a00a43675deb6645f070Mathias Agopian remote()->transact(BnSurfaceComposer::CREATE_CLIENT_CONNECTION, data, &reply); 647623da435e45c7c03ef6a00a43675deb6645f070Mathias Agopian return interface_cast<ISurfaceComposerClient>(reply.readStrongBinder()); 657623da435e45c7c03ef6a00a43675deb6645f070Mathias Agopian } 667623da435e45c7c03ef6a00a43675deb6645f070Mathias Agopian 67d763b5d9197e01662cafa376e1227e53e0463a3cMathias Agopian virtual sp<IMemoryHeap> getCblk() const 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Parcel data, reply; 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data.writeInterfaceToken(ISurfaceComposer::getInterfaceDescriptor()); 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project remote()->transact(BnSurfaceComposer::GET_CBLK, data, &reply); 72d763b5d9197e01662cafa376e1227e53e0463a3cMathias Agopian return interface_cast<IMemoryHeap>(reply.readStrongBinder()); 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual void openGlobalTransaction() 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Parcel data, reply; 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data.writeInterfaceToken(ISurfaceComposer::getInterfaceDescriptor()); 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project remote()->transact(BnSurfaceComposer::OPEN_GLOBAL_TRANSACTION, data, &reply); 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual void closeGlobalTransaction() 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Parcel data, reply; 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data.writeInterfaceToken(ISurfaceComposer::getInterfaceDescriptor()); 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project remote()->transact(BnSurfaceComposer::CLOSE_GLOBAL_TRANSACTION, data, &reply); 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual status_t freezeDisplay(DisplayID dpy, uint32_t flags) 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Parcel data, reply; 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data.writeInterfaceToken(ISurfaceComposer::getInterfaceDescriptor()); 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data.writeInt32(dpy); 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data.writeInt32(flags); 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project remote()->transact(BnSurfaceComposer::FREEZE_DISPLAY, data, &reply); 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return reply.readInt32(); 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual status_t unfreezeDisplay(DisplayID dpy, uint32_t flags) 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Parcel data, reply; 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data.writeInterfaceToken(ISurfaceComposer::getInterfaceDescriptor()); 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data.writeInt32(dpy); 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data.writeInt32(flags); 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project remote()->transact(BnSurfaceComposer::UNFREEZE_DISPLAY, data, &reply); 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return reply.readInt32(); 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 109eb0c86e18b7d620b679ff2a45a0233867a53a334Mathias Agopian virtual int setOrientation(DisplayID dpy, int orientation, uint32_t flags) 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Parcel data, reply; 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data.writeInterfaceToken(ISurfaceComposer::getInterfaceDescriptor()); 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data.writeInt32(dpy); 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data.writeInt32(orientation); 115eb0c86e18b7d620b679ff2a45a0233867a53a334Mathias Agopian data.writeInt32(flags); 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project remote()->transact(BnSurfaceComposer::SET_ORIENTATION, data, &reply); 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return reply.readInt32(); 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual void bootFinished() 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Parcel data, reply; 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data.writeInterfaceToken(ISurfaceComposer::getInterfaceDescriptor()); 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project remote()->transact(BnSurfaceComposer::BOOT_FINISHED, data, &reply); 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 127ca5edbeba92b96913291792a4df984e158853b6dMathias Agopian virtual status_t captureScreen(DisplayID dpy, 128ca5edbeba92b96913291792a4df984e158853b6dMathias Agopian sp<IMemoryHeap>* heap, 129597c7f67b5f2491c6098a1de241a3f0fd274688aMathias Agopian uint32_t* width, uint32_t* height, PixelFormat* format, 130597c7f67b5f2491c6098a1de241a3f0fd274688aMathias Agopian uint32_t reqWidth, uint32_t reqHeight) 131ca5edbeba92b96913291792a4df984e158853b6dMathias Agopian { 132ca5edbeba92b96913291792a4df984e158853b6dMathias Agopian Parcel data, reply; 133ca5edbeba92b96913291792a4df984e158853b6dMathias Agopian data.writeInterfaceToken(ISurfaceComposer::getInterfaceDescriptor()); 134ca5edbeba92b96913291792a4df984e158853b6dMathias Agopian data.writeInt32(dpy); 135597c7f67b5f2491c6098a1de241a3f0fd274688aMathias Agopian data.writeInt32(reqWidth); 136597c7f67b5f2491c6098a1de241a3f0fd274688aMathias Agopian data.writeInt32(reqHeight); 137ca5edbeba92b96913291792a4df984e158853b6dMathias Agopian remote()->transact(BnSurfaceComposer::CAPTURE_SCREEN, data, &reply); 138ca5edbeba92b96913291792a4df984e158853b6dMathias Agopian *heap = interface_cast<IMemoryHeap>(reply.readStrongBinder()); 139ca5edbeba92b96913291792a4df984e158853b6dMathias Agopian *width = reply.readInt32(); 140ca5edbeba92b96913291792a4df984e158853b6dMathias Agopian *height = reply.readInt32(); 141ca5edbeba92b96913291792a4df984e158853b6dMathias Agopian *format = reply.readInt32(); 142ca5edbeba92b96913291792a4df984e158853b6dMathias Agopian return reply.readInt32(); 143ca5edbeba92b96913291792a4df984e158853b6dMathias Agopian } 144ca5edbeba92b96913291792a4df984e158853b6dMathias Agopian 145aab758e87991d1460ca94d4a5f22c0ef34641e2dMathias Agopian virtual status_t turnElectronBeamOff(int32_t mode) 146aab758e87991d1460ca94d4a5f22c0ef34641e2dMathias Agopian { 147aab758e87991d1460ca94d4a5f22c0ef34641e2dMathias Agopian Parcel data, reply; 148aab758e87991d1460ca94d4a5f22c0ef34641e2dMathias Agopian data.writeInterfaceToken(ISurfaceComposer::getInterfaceDescriptor()); 149aab758e87991d1460ca94d4a5f22c0ef34641e2dMathias Agopian data.writeInt32(mode); 150aab758e87991d1460ca94d4a5f22c0ef34641e2dMathias Agopian remote()->transact(BnSurfaceComposer::TURN_ELECTRON_BEAM_OFF, data, &reply); 151aab758e87991d1460ca94d4a5f22c0ef34641e2dMathias Agopian return reply.readInt32(); 152aab758e87991d1460ca94d4a5f22c0ef34641e2dMathias Agopian } 153aab758e87991d1460ca94d4a5f22c0ef34641e2dMathias Agopian 1542d2b803a92ba531cf6c4bb7042326653255b8780Mathias Agopian virtual status_t turnElectronBeamOn(int32_t mode) 1552d2b803a92ba531cf6c4bb7042326653255b8780Mathias Agopian { 1562d2b803a92ba531cf6c4bb7042326653255b8780Mathias Agopian Parcel data, reply; 1572d2b803a92ba531cf6c4bb7042326653255b8780Mathias Agopian data.writeInterfaceToken(ISurfaceComposer::getInterfaceDescriptor()); 1582d2b803a92ba531cf6c4bb7042326653255b8780Mathias Agopian data.writeInt32(mode); 1592d2b803a92ba531cf6c4bb7042326653255b8780Mathias Agopian remote()->transact(BnSurfaceComposer::TURN_ELECTRON_BEAM_ON, data, &reply); 1602d2b803a92ba531cf6c4bb7042326653255b8780Mathias Agopian return reply.readInt32(); 1612d2b803a92ba531cf6c4bb7042326653255b8780Mathias Agopian } 1622d2b803a92ba531cf6c4bb7042326653255b8780Mathias Agopian 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual void signal() const 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Parcel data, reply; 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data.writeInterfaceToken(ISurfaceComposer::getInterfaceDescriptor()); 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project remote()->transact(BnSurfaceComposer::SIGNAL, data, &reply, IBinder::FLAG_ONEWAY); 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectIMPLEMENT_META_INTERFACE(SurfaceComposer, "android.ui.ISurfaceComposer"); 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------- 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatus_t BnSurfaceComposer::onTransact( 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags) 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project switch(code) { 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case CREATE_CONNECTION: { 180aaf834a284a025cedd8ec1cf01d09e1790c1dcf8Mathias Agopian CHECK_INTERFACE(ISurfaceComposer, data, reply); 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<IBinder> b = createConnection()->asBinder(); 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project reply->writeStrongBinder(b); 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } break; 1847623da435e45c7c03ef6a00a43675deb6645f070Mathias Agopian case CREATE_CLIENT_CONNECTION: { 1857623da435e45c7c03ef6a00a43675deb6645f070Mathias Agopian CHECK_INTERFACE(ISurfaceComposer, data, reply); 1867623da435e45c7c03ef6a00a43675deb6645f070Mathias Agopian sp<IBinder> b = createClientConnection()->asBinder(); 1877623da435e45c7c03ef6a00a43675deb6645f070Mathias Agopian reply->writeStrongBinder(b); 1887623da435e45c7c03ef6a00a43675deb6645f070Mathias Agopian } break; 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case OPEN_GLOBAL_TRANSACTION: { 190aaf834a284a025cedd8ec1cf01d09e1790c1dcf8Mathias Agopian CHECK_INTERFACE(ISurfaceComposer, data, reply); 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project openGlobalTransaction(); 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } break; 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case CLOSE_GLOBAL_TRANSACTION: { 194aaf834a284a025cedd8ec1cf01d09e1790c1dcf8Mathias Agopian CHECK_INTERFACE(ISurfaceComposer, data, reply); 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project closeGlobalTransaction(); 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } break; 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case SET_ORIENTATION: { 198aaf834a284a025cedd8ec1cf01d09e1790c1dcf8Mathias Agopian CHECK_INTERFACE(ISurfaceComposer, data, reply); 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project DisplayID dpy = data.readInt32(); 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int orientation = data.readInt32(); 201eb0c86e18b7d620b679ff2a45a0233867a53a334Mathias Agopian uint32_t flags = data.readInt32(); 202eb0c86e18b7d620b679ff2a45a0233867a53a334Mathias Agopian reply->writeInt32( setOrientation(dpy, orientation, flags) ); 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } break; 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case FREEZE_DISPLAY: { 205aaf834a284a025cedd8ec1cf01d09e1790c1dcf8Mathias Agopian CHECK_INTERFACE(ISurfaceComposer, data, reply); 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project DisplayID dpy = data.readInt32(); 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t flags = data.readInt32(); 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project reply->writeInt32( freezeDisplay(dpy, flags) ); 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } break; 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case UNFREEZE_DISPLAY: { 211aaf834a284a025cedd8ec1cf01d09e1790c1dcf8Mathias Agopian CHECK_INTERFACE(ISurfaceComposer, data, reply); 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project DisplayID dpy = data.readInt32(); 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t flags = data.readInt32(); 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project reply->writeInt32( unfreezeDisplay(dpy, flags) ); 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } break; 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case BOOT_FINISHED: { 217aaf834a284a025cedd8ec1cf01d09e1790c1dcf8Mathias Agopian CHECK_INTERFACE(ISurfaceComposer, data, reply); 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bootFinished(); 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } break; 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case SIGNAL: { 221aaf834a284a025cedd8ec1cf01d09e1790c1dcf8Mathias Agopian CHECK_INTERFACE(ISurfaceComposer, data, reply); 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project signal(); 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } break; 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case GET_CBLK: { 225aaf834a284a025cedd8ec1cf01d09e1790c1dcf8Mathias Agopian CHECK_INTERFACE(ISurfaceComposer, data, reply); 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<IBinder> b = getCblk()->asBinder(); 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project reply->writeStrongBinder(b); 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } break; 229ca5edbeba92b96913291792a4df984e158853b6dMathias Agopian case CAPTURE_SCREEN: { 230ca5edbeba92b96913291792a4df984e158853b6dMathias Agopian CHECK_INTERFACE(ISurfaceComposer, data, reply); 231ca5edbeba92b96913291792a4df984e158853b6dMathias Agopian DisplayID dpy = data.readInt32(); 232597c7f67b5f2491c6098a1de241a3f0fd274688aMathias Agopian uint32_t reqWidth = data.readInt32(); 233597c7f67b5f2491c6098a1de241a3f0fd274688aMathias Agopian uint32_t reqHeight = data.readInt32(); 234ca5edbeba92b96913291792a4df984e158853b6dMathias Agopian sp<IMemoryHeap> heap; 235ca5edbeba92b96913291792a4df984e158853b6dMathias Agopian uint32_t w, h; 236ca5edbeba92b96913291792a4df984e158853b6dMathias Agopian PixelFormat f; 237597c7f67b5f2491c6098a1de241a3f0fd274688aMathias Agopian status_t res = captureScreen(dpy, &heap, &w, &h, &f, 238597c7f67b5f2491c6098a1de241a3f0fd274688aMathias Agopian reqWidth, reqHeight); 239ca5edbeba92b96913291792a4df984e158853b6dMathias Agopian reply->writeStrongBinder(heap->asBinder()); 240ca5edbeba92b96913291792a4df984e158853b6dMathias Agopian reply->writeInt32(w); 241ca5edbeba92b96913291792a4df984e158853b6dMathias Agopian reply->writeInt32(h); 242ca5edbeba92b96913291792a4df984e158853b6dMathias Agopian reply->writeInt32(f); 243ca5edbeba92b96913291792a4df984e158853b6dMathias Agopian reply->writeInt32(res); 244ca5edbeba92b96913291792a4df984e158853b6dMathias Agopian } break; 245aab758e87991d1460ca94d4a5f22c0ef34641e2dMathias Agopian case TURN_ELECTRON_BEAM_OFF: { 246aab758e87991d1460ca94d4a5f22c0ef34641e2dMathias Agopian CHECK_INTERFACE(ISurfaceComposer, data, reply); 247aab758e87991d1460ca94d4a5f22c0ef34641e2dMathias Agopian int32_t mode = data.readInt32(); 248aab758e87991d1460ca94d4a5f22c0ef34641e2dMathias Agopian status_t res = turnElectronBeamOff(mode); 249aab758e87991d1460ca94d4a5f22c0ef34641e2dMathias Agopian reply->writeInt32(res); 25058bac9e797941974a1ed4bf2a5ffe2f2752e9f5aJamie Gennis } break; 2512d2b803a92ba531cf6c4bb7042326653255b8780Mathias Agopian case TURN_ELECTRON_BEAM_ON: { 2522d2b803a92ba531cf6c4bb7042326653255b8780Mathias Agopian CHECK_INTERFACE(ISurfaceComposer, data, reply); 2532d2b803a92ba531cf6c4bb7042326653255b8780Mathias Agopian int32_t mode = data.readInt32(); 2542d2b803a92ba531cf6c4bb7042326653255b8780Mathias Agopian status_t res = turnElectronBeamOn(mode); 2552d2b803a92ba531cf6c4bb7042326653255b8780Mathias Agopian reply->writeInt32(res); 25658bac9e797941974a1ed4bf2a5ffe2f2752e9f5aJamie Gennis } break; 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project default: 258aaf834a284a025cedd8ec1cf01d09e1790c1dcf8Mathias Agopian return BBinder::onTransact(code, data, reply, flags); 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return NO_ERROR; 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------------- 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 266