From 35ffa6a868f1aa650c90956a4129bb70f780fc99 Mon Sep 17 00:00:00 2001 From: Mathias Agopian Date: Tue, 12 Mar 2013 18:45:09 -0700 Subject: [PATCH] Surface can now be created only from an IGraphicBufferProducer it can't write itself to a parcel, nor can it be created from a parcel. Change-Id: I69165d5c54d6024b3e546e80d8b57e3dedda7893 --- include/gui/Surface.h | 11 ---- libs/gui/Surface.cpp | 41 ++---------- .../surfaceflinger/tests/surface/Android.mk | 18 ----- .../surfaceflinger/tests/surface/surface.cpp | 66 ------------------- 4 files changed, 5 insertions(+), 131 deletions(-) delete mode 100644 services/surfaceflinger/tests/surface/Android.mk delete mode 100644 services/surfaceflinger/tests/surface/surface.cpp diff --git a/include/gui/Surface.h b/include/gui/Surface.h index 18e57ed9e..c25847ce6 100644 --- a/include/gui/Surface.h +++ b/include/gui/Surface.h @@ -76,24 +76,13 @@ public: return surface != NULL && surface->getIGraphicBufferProducer() != NULL; } - /* writes the given Surface into a Parcel */ - static status_t writeToParcel(const sp& surface, Parcel* parcel); - - /* constructs a Surface from a Parcel. see Surface::writeToParcel() - * and SurfaceControl::writeToParcel() */ - static sp readFromParcel(const Parcel& data); - - protected: - Surface(); virtual ~Surface(); - void setIGraphicBufferProducer(const sp& bufferProducer); private: // can't be copied Surface& operator = (const Surface& rhs); Surface(const Surface& rhs); - void init(); // ANativeWindow hooks static int hook_cancelBuffer(ANativeWindow* window, diff --git a/libs/gui/Surface.cpp b/libs/gui/Surface.cpp index 950d16a4f..ec55b5799 100644 --- a/libs/gui/Surface.cpp +++ b/libs/gui/Surface.cpp @@ -38,22 +38,8 @@ namespace android { Surface::Surface( const sp& bufferProducer) + : mGraphicBufferProducer(bufferProducer) { - Surface::init(); - Surface::setIGraphicBufferProducer(bufferProducer); -} - -Surface::Surface() { - Surface::init(); -} - -Surface::~Surface() { - if (mConnectedToCpu) { - Surface::disconnect(NATIVE_WINDOW_API_CPU); - } -} - -void Surface::init() { // Initialize the ANativeWindow function pointers. ANativeWindow::setSwapInterval = hook_setSwapInterval; ANativeWindow::dequeueBuffer = hook_dequeueBuffer; @@ -87,10 +73,10 @@ void Surface::init() { mConnectedToCpu = false; } -void Surface::setIGraphicBufferProducer( - const sp& bufferProducer) -{ - mGraphicBufferProducer = bufferProducer; +Surface::~Surface() { + if (mConnectedToCpu) { + Surface::disconnect(NATIVE_WINDOW_API_CPU); + } } sp Surface::getIGraphicBufferProducer() const { @@ -723,23 +709,6 @@ static status_t copyBlt( // ---------------------------------------------------------------------------- -status_t Surface::writeToParcel( - const sp& surface, Parcel* parcel) { - sp bp; - if (surface != NULL) { - bp = surface->mGraphicBufferProducer; - } - return parcel->writeStrongBinder(bp->asBinder()); -} - -sp Surface::readFromParcel(const Parcel& data) { - sp binder(data.readStrongBinder()); - sp bp(interface_cast(binder)); - return bp != NULL ? new Surface(bp): NULL; -} - -// ---------------------------------------------------------------------------- - status_t Surface::lock( ANativeWindow_Buffer* outBuffer, ARect* inOutDirtyBounds) { diff --git a/services/surfaceflinger/tests/surface/Android.mk b/services/surfaceflinger/tests/surface/Android.mk deleted file mode 100644 index c59060e17..000000000 --- a/services/surfaceflinger/tests/surface/Android.mk +++ /dev/null @@ -1,18 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_SRC_FILES:= \ - surface.cpp - -LOCAL_SHARED_LIBRARIES := \ - libcutils \ - libutils \ - libbinder \ - libui \ - libgui - -LOCAL_MODULE:= test-surface - -LOCAL_MODULE_TAGS := tests - -include $(BUILD_EXECUTABLE) diff --git a/services/surfaceflinger/tests/surface/surface.cpp b/services/surfaceflinger/tests/surface/surface.cpp deleted file mode 100644 index 9c41cc344..000000000 --- a/services/surfaceflinger/tests/surface/surface.cpp +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright (C) 2010 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include - -#include - -#include -#include -#include - -#include -#include - -using namespace android; - -int main(int argc, char** argv) -{ - // set up the thread-pool - sp proc(ProcessState::self()); - ProcessState::self()->startThreadPool(); - - // create a client to surfaceflinger - sp client = new SurfaceComposerClient(); - - sp surfaceControl = client->createSurface( - String8("surface"), 160, 240, PIXEL_FORMAT_RGB_565, 0); - SurfaceComposerClient::openGlobalTransaction(); - surfaceControl->setLayer(100000); - SurfaceComposerClient::closeGlobalTransaction(); - - // pretend it went cross-process - Parcel parcel; - SurfaceControl::writeSurfaceToParcel(surfaceControl, &parcel); - parcel.setDataPosition(0); - sp surface = Surface::readFromParcel(parcel); - ANativeWindow* window = surface.get(); - - printf("window=%p\n", window); - - int err = native_window_set_buffer_count(window, 8); - ANativeWindowBuffer* buffer; - - for (int i=0 ; i<8 ; i++) { - window->dequeueBuffer(window, &buffer); - printf("buffer %d: %p\n", i, buffer); - } - - printf("test complete. CTRL+C to finish.\n"); - - IPCThreadState::self()->joinThreadPool(); - return 0; -}