diff options
author | Mathias Agopian <mathias@google.com> | 2017-02-08 17:04:18 -0800 |
---|---|---|
committer | Mathias Agopian <mathias@google.com> | 2017-02-09 23:07:31 +0000 |
commit | 05debe1d787b7471c2bc9c8f7569a338ca5c7ad4 (patch) | |
tree | 3c36416857b2879af76b13879ffd3073d21cee42 | |
parent | 5c0a87e5a2cba5c1b199e77f3a42e931e706569b (diff) |
Split view::Surface out of Surface.cpp
it’s moved into a new view/Surface.cpp, header in
gui/view/Surface.h
their entanglement also meant that code that needs
only view::Surface ended up with all of Surface
dependencies.
Test: built and booted device
Bug: treble
Change-Id: I1a350d258f124fbe0a7bc5a2ca165311dcb0d8e3
-rw-r--r-- | aidl/gui/android/view/Surface.aidl | 2 | ||||
-rw-r--r-- | include/gui/Surface.h | 41 | ||||
-rw-r--r-- | include/gui/view/Surface.h | 68 | ||||
-rw-r--r-- | libs/gui/Android.bp | 1 | ||||
-rw-r--r-- | libs/gui/Surface.cpp | 75 | ||||
-rw-r--r-- | libs/gui/view/Surface.cpp | 97 |
6 files changed, 170 insertions, 114 deletions
diff --git a/aidl/gui/android/view/Surface.aidl b/aidl/gui/android/view/Surface.aidl index 674c16387e..7e892205d5 100644 --- a/aidl/gui/android/view/Surface.aidl +++ b/aidl/gui/android/view/Surface.aidl @@ -17,4 +17,4 @@ package android.view; -parcelable Surface cpp_header "gui/Surface.h"; +parcelable Surface cpp_header "gui/view/Surface.h"; diff --git a/include/gui/Surface.h b/include/gui/Surface.h index 60203f7c4f..c3014b2696 100644 --- a/include/gui/Surface.h +++ b/include/gui/Surface.h @@ -17,8 +17,6 @@ #ifndef ANDROID_GUI_SURFACE_H #define ANDROID_GUI_SURFACE_H -#include <binder/Parcelable.h> - #include <gui/IGraphicBufferProducer.h> #include <gui/BufferQueueDefs.h> @@ -410,43 +408,6 @@ protected: std::unique_ptr<ProducerFrameEventHistory> mFrameEventHistory; }; -namespace view { - -/** - * A simple holder for an IGraphicBufferProducer, to match the managed-side - * android.view.Surface parcelable behavior. - * - * This implements android/view/Surface.aidl - * - * TODO: Convert IGraphicBufferProducer into AIDL so that it can be directly - * used in managed Binder calls. - */ -class Surface : public Parcelable { - public: - - String16 name; - sp<IGraphicBufferProducer> graphicBufferProducer; - - virtual status_t writeToParcel(Parcel* parcel) const override; - virtual status_t readFromParcel(const Parcel* parcel) override; - - // nameAlreadyWritten set to true by Surface.java, because it splits - // Parceling itself between managed and native code, so it only wants a part - // of the full parceling to happen on its native side. - status_t writeToParcel(Parcel* parcel, bool nameAlreadyWritten) const; - - // nameAlreadyRead set to true by Surface.java, because it splits - // Parceling itself between managed and native code, so it only wants a part - // of the full parceling to happen on its native side. - status_t readFromParcel(const Parcel* parcel, bool nameAlreadyRead); - - private: - - static String16 readMaybeEmptyString16(const Parcel* parcel); -}; - -} // namespace view - -}; // namespace android +} // namespace android #endif // ANDROID_GUI_SURFACE_H diff --git a/include/gui/view/Surface.h b/include/gui/view/Surface.h new file mode 100644 index 0000000000..cc64fd45dd --- /dev/null +++ b/include/gui/view/Surface.h @@ -0,0 +1,68 @@ +/* + * 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. + */ + +#ifndef ANDROID_GUI_VIEW_SURFACE_H +#define ANDROID_GUI_VIEW_SURFACE_H + +#include <utils/Errors.h> +#include <utils/StrongPointer.h> +#include <utils/String16.h> + +#include <binder/Parcelable.h> + +namespace android { + +class IGraphicBufferProducer; + +namespace view { + +/** + * A simple holder for an IGraphicBufferProducer, to match the managed-side + * android.view.Surface parcelable behavior. + * + * This implements android/view/Surface.aidl + * + * TODO: Convert IGraphicBufferProducer into AIDL so that it can be directly + * used in managed Binder calls. + */ +class Surface : public Parcelable { + public: + + String16 name; + sp<IGraphicBufferProducer> graphicBufferProducer; + + virtual status_t writeToParcel(Parcel* parcel) const override; + virtual status_t readFromParcel(const Parcel* parcel) override; + + // nameAlreadyWritten set to true by Surface.java, because it splits + // Parceling itself between managed and native code, so it only wants a part + // of the full parceling to happen on its native side. + status_t writeToParcel(Parcel* parcel, bool nameAlreadyWritten) const; + + // nameAlreadyRead set to true by Surface.java, because it splits + // Parceling itself between managed and native code, so it only wants a part + // of the full parceling to happen on its native side. + status_t readFromParcel(const Parcel* parcel, bool nameAlreadyRead); + + private: + + static String16 readMaybeEmptyString16(const Parcel* parcel); +}; + +} // namespace view +} // namespace android + +#endif // ANDROID_GUI_VIEW_SURFACE_H diff --git a/libs/gui/Android.bp b/libs/gui/Android.bp index cb17da4d87..ddf107297e 100644 --- a/libs/gui/Android.bp +++ b/libs/gui/Android.bp @@ -96,6 +96,7 @@ cc_library_shared { "SurfaceControl.cpp", "SurfaceComposerClient.cpp", "SyncFeatures.cpp", + "view/Surface.cpp", ], shared_libs: [ diff --git a/libs/gui/Surface.cpp b/libs/gui/Surface.cpp index c66362074e..72fa843cc2 100644 --- a/libs/gui/Surface.cpp +++ b/libs/gui/Surface.cpp @@ -18,9 +18,9 @@ #define ATRACE_TAG ATRACE_TAG_GRAPHICS //#define LOG_NDEBUG 0 -#include <android/native_window.h> +#include <gui/Surface.h> -#include <binder/Parcel.h> +#include <android/native_window.h> #include <utils/Log.h> #include <utils/Trace.h> @@ -32,7 +32,6 @@ #include <gui/BufferItem.h> #include <gui/IProducerListener.h> -#include <gui/Surface.h> #include <gui/ISurfaceComposer.h> #include <private/gui/ComposerService.h> @@ -1539,74 +1538,4 @@ status_t Surface::getUniqueId(uint64_t* outId) const { return mGraphicBufferProducer->getUniqueId(outId); } -namespace view { - -status_t Surface::writeToParcel(Parcel* parcel) const { - return writeToParcel(parcel, false); -} - -status_t Surface::writeToParcel(Parcel* parcel, bool nameAlreadyWritten) const { - if (parcel == nullptr) return BAD_VALUE; - - status_t res = OK; - - if (!nameAlreadyWritten) { - res = parcel->writeString16(name); - if (res != OK) return res; - - /* isSingleBuffered defaults to no */ - res = parcel->writeInt32(0); - if (res != OK) return res; - } - - res = parcel->writeStrongBinder( - IGraphicBufferProducer::asBinder(graphicBufferProducer)); - - return res; -} - -status_t Surface::readFromParcel(const Parcel* parcel) { - return readFromParcel(parcel, false); -} - -status_t Surface::readFromParcel(const Parcel* parcel, bool nameAlreadyRead) { - if (parcel == nullptr) return BAD_VALUE; - - status_t res = OK; - if (!nameAlreadyRead) { - name = readMaybeEmptyString16(parcel); - // Discard this for now - int isSingleBuffered; - res = parcel->readInt32(&isSingleBuffered); - if (res != OK) { - ALOGE("Can't read isSingleBuffered"); - return res; - } - } - - sp<IBinder> binder; - - res = parcel->readNullableStrongBinder(&binder); - if (res != OK) { - ALOGE("%s: Can't read strong binder", __FUNCTION__); - return res; - } - - graphicBufferProducer = interface_cast<IGraphicBufferProducer>(binder); - - return OK; -} - -String16 Surface::readMaybeEmptyString16(const Parcel* parcel) { - size_t len; - const char16_t* str = parcel->readString16Inplace(&len); - if (str != nullptr) { - return String16(str, len); - } else { - return String16(); - } -} - -} // namespace view - }; // namespace android diff --git a/libs/gui/view/Surface.cpp b/libs/gui/view/Surface.cpp new file mode 100644 index 0000000000..5ed3d3bebb --- /dev/null +++ b/libs/gui/view/Surface.cpp @@ -0,0 +1,97 @@ +/* + * 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. + */ + +#define LOG_TAG "Surface" + +#include <gui/view/Surface.h> + +#include <binder/Parcel.h> + +#include <utils/Log.h> + +#include <gui/IGraphicBufferProducer.h> + +namespace android { +namespace view { + +status_t Surface::writeToParcel(Parcel* parcel) const { + return writeToParcel(parcel, false); +} + +status_t Surface::writeToParcel(Parcel* parcel, bool nameAlreadyWritten) const { + if (parcel == nullptr) return BAD_VALUE; + + status_t res = OK; + + if (!nameAlreadyWritten) { + res = parcel->writeString16(name); + if (res != OK) return res; + + /* isSingleBuffered defaults to no */ + res = parcel->writeInt32(0); + if (res != OK) return res; + } + + res = parcel->writeStrongBinder( + IGraphicBufferProducer::asBinder(graphicBufferProducer)); + + return res; +} + +status_t Surface::readFromParcel(const Parcel* parcel) { + return readFromParcel(parcel, false); +} + +status_t Surface::readFromParcel(const Parcel* parcel, bool nameAlreadyRead) { + if (parcel == nullptr) return BAD_VALUE; + + status_t res = OK; + if (!nameAlreadyRead) { + name = readMaybeEmptyString16(parcel); + // Discard this for now + int isSingleBuffered; + res = parcel->readInt32(&isSingleBuffered); + if (res != OK) { + ALOGE("Can't read isSingleBuffered"); + return res; + } + } + + sp<IBinder> binder; + + res = parcel->readNullableStrongBinder(&binder); + if (res != OK) { + ALOGE("%s: Can't read strong binder", __FUNCTION__); + return res; + } + + graphicBufferProducer = interface_cast<IGraphicBufferProducer>(binder); + + return OK; +} + +String16 Surface::readMaybeEmptyString16(const Parcel* parcel) { + size_t len; + const char16_t* str = parcel->readString16Inplace(&len); + if (str != nullptr) { + return String16(str, len); + } else { + return String16(); + } +} + +} // namespace view +} // namespace android |