diff options
author | 2018-08-17 12:27:51 -0700 | |
---|---|---|
committer | 2018-08-17 16:45:29 -0700 | |
commit | efefaac7748a7c2d1f5878f398c1d6c38713ce03 (patch) | |
tree | 22a090e243c279d5ea669e714c230977ab7c4ca5 | |
parent | 3db423465dc6e177aab27f315426541714201ebe (diff) |
[SurfaceFlinger] Move Transform to libs/ui
A bunch of code in SurfaceFlinger uses Transform, so does RenderEngine. In
order to move RenderEngine to its own library, we need to lift Transform to
another place where it's part of VNDK. Since Transform depends on libs/ui, we
move Transform to libs/ui as well.
BUG: 112585051
Test: Build, flash, boot and check transformation.
Change-Id: Ie4d13ee135ba3f71fcbd9f86994a0b048e2c6878
26 files changed, 278 insertions, 284 deletions
diff --git a/libs/ui/Android.bp b/libs/ui/Android.bp index d25ad1a46d..e3ef2a9e1d 100644 --- a/libs/ui/Android.bp +++ b/libs/ui/Android.bp @@ -65,6 +65,7 @@ cc_library_shared { "PixelFormat.cpp", "Rect.cpp", "Region.cpp", + "Transform.cpp", "UiConfig.cpp", ], diff --git a/services/surfaceflinger/Transform.cpp b/libs/ui/Transform.cpp index bc9e5cd5d7..8e949ec880 100644 --- a/services/surfaceflinger/Transform.cpp +++ b/libs/ui/Transform.cpp @@ -17,16 +17,12 @@ #include <math.h> #include <cutils/compiler.h> -#include <utils/String8.h> #include <ui/Region.h> - -#include "Transform.h" - -// --------------------------------------------------------------------------- +#include <ui/Transform.h> +#include <utils/String8.h> namespace android { - -// --------------------------------------------------------------------------- +namespace ui { Transform::Transform() { reset(); @@ -40,8 +36,7 @@ Transform::Transform(uint32_t orientation) { set(orientation, 0, 0); } -Transform::~Transform() { -} +Transform::~Transform() = default; static const float EPSILON = 0.0f; @@ -66,7 +61,7 @@ Transform Transform::operator * (const Transform& rhs) const const mat33& A(mMatrix); const mat33& B(rhs.mMatrix); mat33& D(r.mMatrix); - for (int i=0 ; i<3 ; i++) { + for (size_t i = 0; i < 3; i++) { const float v0 = A[0][i]; const float v1 = A[1][i]; const float v2 = A[2][i]; @@ -82,6 +77,12 @@ Transform Transform::operator * (const Transform& rhs) const return r; } +Transform& Transform::operator=(const Transform& other) { + mMatrix = other.mMatrix; + mType = other.mType; + return *this; +} + const vec3& Transform::operator [] (size_t i) const { return mMatrix[i]; } @@ -96,10 +97,10 @@ float Transform::ty() const { void Transform::reset() { mType = IDENTITY; - for(int i=0 ; i<3 ; i++) { + for(size_t i = 0; i < 3; i++) { vec3& v(mMatrix[i]); - for (int j=0 ; j<3 ; j++) - v[j] = ((i==j) ? 1.0f : 0.0f); + for (size_t j = 0; j < 3; j++) + v[j] = ((i == j) ? 1.0f : 0.0f); } } @@ -209,15 +210,15 @@ Rect Transform::transform(const Rect& bounds, bool roundOutwards) const rb = transform(rb); if (roundOutwards) { - r.left = floorf(std::min({lt[0], rt[0], lb[0], rb[0]})); - r.top = floorf(std::min({lt[1], rt[1], lb[1], rb[1]})); - r.right = ceilf(std::max({lt[0], rt[0], lb[0], rb[0]})); - r.bottom = ceilf(std::max({lt[1], rt[1], lb[1], rb[1]})); + r.left = static_cast<int32_t>(floorf(std::min({lt[0], rt[0], lb[0], rb[0]}))); + r.top = static_cast<int32_t>(floorf(std::min({lt[1], rt[1], lb[1], rb[1]}))); + r.right = static_cast<int32_t>(ceilf(std::max({lt[0], rt[0], lb[0], rb[0]}))); + r.bottom = static_cast<int32_t>(ceilf(std::max({lt[1], rt[1], lb[1], rb[1]}))); } else { - r.left = floorf(std::min({lt[0], rt[0], lb[0], rb[0]}) + 0.5f); - r.top = floorf(std::min({lt[1], rt[1], lb[1], rb[1]}) + 0.5f); - r.right = floorf(std::max({lt[0], rt[0], lb[0], rb[0]}) + 0.5f); - r.bottom = floorf(std::max({lt[1], rt[1], lb[1], rb[1]}) + 0.5f); + r.left = static_cast<int32_t>(floorf(std::min({lt[0], rt[0], lb[0], rb[0]}) + 0.5f)); + r.top = static_cast<int32_t>(floorf(std::min({lt[1], rt[1], lb[1], rb[1]}) + 0.5f)); + r.right = static_cast<int32_t>(floorf(std::max({lt[0], rt[0], lb[0], rb[0]}) + 0.5f)); + r.bottom = static_cast<int32_t>(floorf(std::max({lt[1], rt[1], lb[1], rb[1]}) + 0.5f)); } return r; @@ -258,8 +259,8 @@ Region Transform::transform(const Region& reg) const out.set(transform(reg.bounds())); } } else { - int xpos = floorf(tx() + 0.5f); - int ypos = floorf(ty() + 0.5f); + int xpos = static_cast<int>(floorf(tx() + 0.5f)); + int ypos = static_cast<int>(floorf(ty() + 0.5f)); out = reg.translate(xpos, ypos); } return out; @@ -342,7 +343,7 @@ Transform Transform::inverse() const { const float x = M[2][0]; const float y = M[2][1]; - const float idet = 1.0 / (a*d - b*c); + const float idet = 1.0f / (a*d - b*c); result.mMatrix[0][0] = d*idet; result.mMatrix[0][1] = -c*idet; result.mMatrix[1][0] = -b*idet; @@ -403,28 +404,13 @@ void Transform::dump(const char* name) const type.append("TRANSLATE "); ALOGD("%s 0x%08x (%s, %s)", name, mType, flags.string(), type.string()); - ALOGD("%.4f %.4f %.4f", m[0][0], m[1][0], m[2][0]); - ALOGD("%.4f %.4f %.4f", m[0][1], m[1][1], m[2][1]); - ALOGD("%.4f %.4f %.4f", m[0][2], m[1][2], m[2][2]); -} - -Transform::orientation_flags Transform::fromRotation(ISurfaceComposer::Rotation rotation) { - // Convert to surfaceflinger's internal rotation type. - switch (rotation) { - case ISurfaceComposer::eRotateNone: - return Transform::ROT_0; - case ISurfaceComposer::eRotate90: - return Transform::ROT_90; - case ISurfaceComposer::eRotate180: - return Transform::ROT_180; - case ISurfaceComposer::eRotate270: - return Transform::ROT_270; - default: - ALOGE("Invalid rotation passed to captureScreen(): %d\n", rotation); - return Transform::ROT_0; - } + ALOGD("%.4f %.4f %.4f", static_cast<double>(m[0][0]), static_cast<double>(m[1][0]), + static_cast<double>(m[2][0])); + ALOGD("%.4f %.4f %.4f", static_cast<double>(m[0][1]), static_cast<double>(m[1][1]), + static_cast<double>(m[2][1])); + ALOGD("%.4f %.4f %.4f", static_cast<double>(m[0][2]), static_cast<double>(m[1][2]), + static_cast<double>(m[2][2])); } -// --------------------------------------------------------------------------- - -}; // namespace android +} // namespace ui +} // namespace android diff --git a/libs/ui/include/ui/Transform.h b/libs/ui/include/ui/Transform.h new file mode 100644 index 0000000000..42dca75f6b --- /dev/null +++ b/libs/ui/include/ui/Transform.h @@ -0,0 +1,113 @@ +/* + * Copyright (C) 2007 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_TRANSFORM_H +#define ANDROID_TRANSFORM_H + +#include <stdint.h> +#include <sys/types.h> + +#include <hardware/hardware.h> +#include <math/vec2.h> +#include <math/vec3.h> +#include <ui/Point.h> +#include <ui/Rect.h> + +namespace android { + +class Region; + +namespace ui { + +class Transform { +public: + Transform(); + Transform(const Transform& other); + explicit Transform(uint32_t orientation); + ~Transform(); + + enum orientation_flags { + ROT_0 = 0x00000000, + FLIP_H = HAL_TRANSFORM_FLIP_H, + FLIP_V = HAL_TRANSFORM_FLIP_V, + ROT_90 = HAL_TRANSFORM_ROT_90, + ROT_180 = FLIP_H|FLIP_V, + ROT_270 = ROT_180|ROT_90, + ROT_INVALID = 0x80 + }; + + enum type_mask : uint32_t { + IDENTITY = 0, + TRANSLATE = 0x1, + ROTATE = 0x2, + SCALE = 0x4, + UNKNOWN = 0x8 + }; + + // query the transform + bool preserveRects() const; + uint32_t getType() const; + uint32_t getOrientation() const; + + const vec3& operator [] (size_t i) const; // returns column i + float tx() const; + float ty() const; + + // modify the transform + void reset(); + void set(float tx, float ty); + void set(float a, float b, float c, float d); + status_t set(uint32_t flags, float w, float h); + + // transform data + Rect makeBounds(int w, int h) const; + vec2 transform(int x, int y) const; + Region transform(const Region& reg) const; + Rect transform(const Rect& bounds, + bool roundOutwards = false) const; + FloatRect transform(const FloatRect& bounds) const; + Transform& operator = (const Transform& other); + Transform operator * (const Transform& rhs) const; + // assumes the last row is < 0 , 0 , 1 > + vec2 transform(const vec2& v) const; + vec3 transform(const vec3& v) const; + + Transform inverse() const; + + // for debugging + void dump(const char* name) const; + +private: + struct mat33 { + vec3 v[3]; + inline const vec3& operator [] (size_t i) const { return v[i]; } + inline vec3& operator [] (size_t i) { return v[i]; } + }; + + enum { UNKNOWN_TYPE = 0x80000000 }; + + uint32_t type() const; + static bool absIsOne(float f); + static bool isZero(float f); + + mat33 mMatrix; + mutable uint32_t mType; +}; + +} // namespace ui +} // namespace android + +#endif /* ANDROID_TRANSFORM_H */ diff --git a/services/surfaceflinger/Android.bp b/services/surfaceflinger/Android.bp index fa0141f48b..efaeaa2d73 100644 --- a/services/surfaceflinger/Android.bp +++ b/services/surfaceflinger/Android.bp @@ -137,7 +137,6 @@ filegroup { "SurfaceInterceptor.cpp", "SurfaceTracing.cpp", "TimeStats/TimeStats.cpp", - "Transform.cpp", ], } diff --git a/services/surfaceflinger/BufferLayer.cpp b/services/surfaceflinger/BufferLayer.cpp index 2c91da060a..e1094d828a 100644 --- a/services/surfaceflinger/BufferLayer.cpp +++ b/services/surfaceflinger/BufferLayer.cpp @@ -258,7 +258,7 @@ bool BufferLayer::isHdrY410() const { void BufferLayer::setPerFrameData(const sp<const DisplayDevice>& display) { // Apply this display's projection's viewport to the visible region // before giving it to the HWC HAL. - const Transform& tr = display->getTransform(); + const ui::Transform& tr = display->getTransform(); const auto& viewport = display->getViewport(); Region visible = tr.transform(visibleRegion.intersect(viewport)); const auto displayId = display->getId(); @@ -638,7 +638,7 @@ void BufferLayer::drawWithOpenGL(const RenderArea& renderArea, bool useIdentityT */ const Rect bounds{computeBounds()}; // Rounds from FloatRect - Transform t = getTransform(); + ui::Transform t = getTransform(); Rect win = bounds; Rect finalCrop = getFinalCrop(s); if (!finalCrop.isEmpty()) { diff --git a/services/surfaceflinger/BufferLayer.h b/services/surfaceflinger/BufferLayer.h index 13f4e83b44..0b641b731f 100644 --- a/services/surfaceflinger/BufferLayer.h +++ b/services/surfaceflinger/BufferLayer.h @@ -27,7 +27,6 @@ #include "RenderEngine/Mesh.h" #include "RenderEngine/Texture.h" #include "SurfaceFlinger.h" -#include "Transform.h" #include <gui/ISurfaceComposerClient.h> #include <gui/LayerState.h> diff --git a/services/surfaceflinger/BufferStateLayer.cpp b/services/surfaceflinger/BufferStateLayer.cpp index 276e0e1d63..369ad89e53 100644 --- a/services/surfaceflinger/BufferStateLayer.cpp +++ b/services/surfaceflinger/BufferStateLayer.cpp @@ -213,7 +213,7 @@ bool BufferStateLayer::setTransparentRegionHint(const Region& transparent) { bool BufferStateLayer::setMatrix(const layer_state_t::matrix22_t& matrix, bool allowNonRectPreservingTransforms) { - Transform t; + ui::Transform t; t.set(matrix.dsdx, matrix.dtdy, matrix.dtdx, matrix.dsdy); if (!allowNonRectPreservingTransforms && !t.preserveRects()) { @@ -399,13 +399,13 @@ status_t BufferStateLayer::updateTexImage(bool& /*recomputeVisibleRegions*/, nse uint32_t bufferWidth = s.buffer->width; uint32_t bufferHeight = s.buffer->height; - if (s.transform & Transform::ROT_90) { + if (s.transform & ui::Transform::ROT_90) { std::swap(bufferWidth, bufferHeight); } if (s.transformToDisplayInverse) { uint32_t invTransform = DisplayDevice::getPrimaryDisplayOrientationTransform(); - if (invTransform & Transform::ROT_90) { + if (invTransform & ui::Transform::ROT_90) { std::swap(bufferWidth, bufferHeight); } } diff --git a/services/surfaceflinger/BufferStateLayer.h b/services/surfaceflinger/BufferStateLayer.h index 4d7396ef81..e492375837 100644 --- a/services/surfaceflinger/BufferStateLayer.h +++ b/services/surfaceflinger/BufferStateLayer.h @@ -52,7 +52,7 @@ public: uint32_t getActiveWidth(const Layer::State& s) const override { return s.active.w; } uint32_t getActiveHeight(const Layer::State& s) const override { return s.active.h; } - Transform getActiveTransform(const Layer::State& s) const override { + ui::Transform getActiveTransform(const Layer::State& s) const override { return s.active.transform; } Region getActiveTransparentRegion(const Layer::State& s) const override { diff --git a/services/surfaceflinger/ColorLayer.cpp b/services/surfaceflinger/ColorLayer.cpp index bac46a38b4..7eeaabb886 100644 --- a/services/surfaceflinger/ColorLayer.cpp +++ b/services/surfaceflinger/ColorLayer.cpp @@ -72,7 +72,7 @@ bool ColorLayer::isVisible() const { } void ColorLayer::setPerFrameData(const sp<const DisplayDevice>& display) { - const Transform& tr = display->getTransform(); + const ui::Transform& tr = display->getTransform(); const auto& viewport = display->getViewport(); Region visible = tr.transform(visibleRegion.intersect(viewport)); const auto displayId = display->getId(); diff --git a/services/surfaceflinger/DisplayDevice.cpp b/services/surfaceflinger/DisplayDevice.cpp index 54c0dbee74..776b84ae0b 100644 --- a/services/surfaceflinger/DisplayDevice.cpp +++ b/services/surfaceflinger/DisplayDevice.cpp @@ -389,7 +389,7 @@ void DisplayDevice::setViewportAndProjection() const { size_t h = mDisplayHeight; Rect sourceCrop(0, 0, w, h); mFlinger->getRenderEngine().setViewportAndProjection(w, h, sourceCrop, h, - false, Transform::ROT_0); + false, ui::Transform::ROT_0); } const sp<Fence>& DisplayDevice::getClientTargetAcquireFence() const { @@ -419,7 +419,7 @@ Region DisplayDevice::getDirtyRegion(bool repaintEverything) const { if (repaintEverything) { dirty.set(getBounds()); } else { - const Transform& planeTransform(mGlobalTransform); + const ui::Transform& planeTransform(mGlobalTransform); dirty = planeTransform.transform(this->dirtyRegion); dirty.andSelf(getBounds()); } @@ -498,37 +498,37 @@ uint32_t DisplayDevice::getOrientationTransform() const { uint32_t transform = 0; switch (mOrientation) { case DisplayState::eOrientationDefault: - transform = Transform::ROT_0; + transform = ui::Transform::ROT_0; break; case DisplayState::eOrientation90: - transform = Transform::ROT_90; + transform = ui::Transform::ROT_90; break; case DisplayState::eOrientation180: - transform = Transform::ROT_180; + transform = ui::Transform::ROT_180; break; case DisplayState::eOrientation270: - transform = Transform::ROT_270; + transform = ui::Transform::ROT_270; break; } return transform; } status_t DisplayDevice::orientationToTransfrom( - int orientation, int w, int h, Transform* tr) + int orientation, int w, int h, ui::Transform* tr) { uint32_t flags = 0; switch (orientation) { case DisplayState::eOrientationDefault: - flags = Transform::ROT_0; + flags = ui::Transform::ROT_0; break; case DisplayState::eOrientation90: - flags = Transform::ROT_90; + flags = ui::Transform::ROT_90; break; case DisplayState::eOrientation180: - flags = Transform::ROT_180; + flags = ui::Transform::ROT_180; break; case DisplayState::eOrientation270: - flags = Transform::ROT_270; + flags = ui::Transform::ROT_270; break; default: return BAD_VALUE; @@ -563,7 +563,7 @@ void DisplayDevice::setProjection(int orientation, const int w = mDisplayWidth; const int h = mDisplayHeight; - Transform R; + ui::Transform R; DisplayDevice::orientationToTransfrom(orientation, w, h, &R); if (!frame.isValid()) { @@ -578,7 +578,7 @@ void DisplayDevice::setProjection(int orientation, // it's also invalid to have an empty viewport, so we handle that // case in the same way. viewport = Rect(w, h); - if (R.getOrientation() & Transform::ROT_90) { + if (R.getOrientation() & ui::Transform::ROT_90) { // viewport is always specified in the logical orientation // of the display (ie: post-rotation). std::swap(viewport.right, viewport.bottom); @@ -587,7 +587,7 @@ void DisplayDevice::setProjection(int orientation, dirtyRegion.set(getBounds()); - Transform TL, TP, S; + ui::Transform TL, TP, S; float src_width = viewport.width(); float src_height = viewport.height(); float dst_width = frame.width(); @@ -621,7 +621,7 @@ void DisplayDevice::setProjection(int orientation, const uint8_t type = mGlobalTransform.getType(); mNeedsFiltering = (!mGlobalTransform.preserveRects() || - (type >= Transform::SCALE)); + (type >= ui::Transform::SCALE)); mScissor = mGlobalTransform.transform(viewport); if (mScissor.isEmpty()) { @@ -633,16 +633,16 @@ void DisplayDevice::setProjection(int orientation, uint32_t transform = 0; switch (mOrientation) { case DisplayState::eOrientationDefault: - transform = Transform::ROT_0; + transform = ui::Transform::ROT_0; break; case DisplayState::eOrientation90: - transform = Transform::ROT_90; + transform = ui::Transform::ROT_90; break; case DisplayState::eOrientation180: - transform = Transform::ROT_180; + transform = ui::Transform::ROT_180; break; case DisplayState::eOrientation270: - transform = Transform::ROT_270; + transform = ui::Transform::ROT_270; break; } sPrimaryDisplayOrientation = transform; @@ -656,7 +656,7 @@ uint32_t DisplayDevice::getPrimaryDisplayOrientationTransform() { } void DisplayDevice::dump(String8& result) const { - const Transform& tr(mGlobalTransform); + const ui::Transform& tr(mGlobalTransform); ANativeWindow* const window = mNativeWindow.get(); result.appendFormat("+ DisplayDevice: %s\n", mDisplayName.c_str()); result.appendFormat(" type=%x, ID=%d, layerStack=%u, (%4dx%4d), ANativeWindow=%p " diff --git a/services/surfaceflinger/DisplayDevice.h b/services/surfaceflinger/DisplayDevice.h index f440d29ad7..bcb2976998 100644 --- a/services/surfaceflinger/DisplayDevice.h +++ b/services/surfaceflinger/DisplayDevice.h @@ -17,19 +17,20 @@ #ifndef ANDROID_DISPLAY_DEVICE_H #define ANDROID_DISPLAY_DEVICE_H -#include "Transform.h" - #include <stdlib.h> -#include <unordered_map> -#include <math/mat4.h> +#include <memory> +#include <string> +#include <unordered_map> #include <binder/IBinder.h> -#include <gui/ISurfaceComposer.h> #include <hardware/hwcomposer_defs.h> +#include <gui/ISurfaceComposer.h> +#include <math/mat4.h> #include <ui/GraphicTypes.h> #include <ui/HdrCapabilities.h> #include <ui/Region.h> +#include <ui/Transform.h> #include <utils/RefBase.h> #include <utils/Mutex.h> #include <utils/String8.h> @@ -38,9 +39,6 @@ #include "RenderArea.h" #include "RenderEngine/Surface.h" -#include <memory> -#include <string> - struct ANativeWindow; namespace android { @@ -126,7 +124,7 @@ public: int getOrientation() const { return mOrientation; } uint32_t getOrientationTransform() const; static uint32_t getPrimaryDisplayOrientationTransform(); - const Transform& getTransform() const { return mGlobalTransform; } + const ui::Transform& getTransform() const { return mGlobalTransform; } const Rect getViewport() const { return mViewport; } const Rect getFrame() const { return mFrame; } const Rect& getScissor() const { return mScissor; } @@ -254,7 +252,7 @@ private: * Transaction state */ static status_t orientationToTransfrom(int orientation, - int w, int h, Transform* tr); + int w, int h, ui::Transform* tr); // The identifier of the active layer stack for this display. Several displays // can use the same layer stack: A z-ordered group of layers (sometimes called @@ -269,7 +267,7 @@ private: Rect mFrame; // pre-computed scissor to apply to the display Rect mScissor; - Transform mGlobalTransform; + ui::Transform mGlobalTransform; bool mNeedsFiltering; // Current power mode int mPowerMode; @@ -344,7 +342,7 @@ public: : RenderArea(reqHeight, reqWidth, CaptureFill::OPAQUE, rotation), mDevice(device), mSourceCrop(sourceCrop) {} - const Transform& getTransform() const override { return mDevice->getTransform(); } + const ui::Transform& getTransform() const override { return mDevice->getTransform(); } Rect getBounds() const override { return mDevice->getBounds(); } int getHeight() const override { return mDevice->getHeight(); } int getWidth() const override { return mDevice->getWidth(); } diff --git a/services/surfaceflinger/Layer.cpp b/services/surfaceflinger/Layer.cpp index 35cbda061d..f7f3fac934 100644 --- a/services/surfaceflinger/Layer.cpp +++ b/services/surfaceflinger/Layer.cpp @@ -295,7 +295,7 @@ Rect Layer::computeScreenBounds(bool reduceTransparentRegion) const { win.intersect(crop, &win); } - Transform t = getTransform(); + ui::Transform t = getTransform(); win = t.transform(win); Rect finalCrop = getFinalCrop(s); @@ -349,7 +349,7 @@ FloatRect Layer::computeBounds(const Region& activeTransparentRegion) const { parentBounds = p->computeBounds(Region()); } - Transform t = s.active_legacy.transform; + ui::Transform t = s.active_legacy.transform; if (p != nullptr || !s.finalCrop_legacy.isEmpty()) { floatWin = t.transform(floatWin); @@ -383,7 +383,7 @@ Rect Layer::computeInitialCrop(const sp<const DisplayDevice>& display) const { activeCrop.intersect(crop, &activeCrop); } - Transform t = getTransform(); + ui::Transform t = getTransform(); activeCrop = t.transform(activeCrop); if (!activeCrop.intersect(display->getViewport(), &activeCrop)) { activeCrop.clear(); @@ -414,7 +414,7 @@ FloatRect Layer::computeCrop(const sp<const DisplayDevice>& display) const { // Screen space to make reduction to parent crop clearer. Rect activeCrop = computeInitialCrop(display); - Transform t = getTransform(); + ui::Transform t = getTransform(); // Back to layer space to work with the content crop. activeCrop = t.inverse().transform(activeCrop); @@ -446,7 +446,8 @@ FloatRect Layer::computeCrop(const sp<const DisplayDevice>& display) const { invTransformOrient ^= NATIVE_WINDOW_TRANSFORM_FLIP_V | NATIVE_WINDOW_TRANSFORM_FLIP_H; } // and apply to the current transform - invTransform = (Transform(invTransformOrient) * Transform(invTransform)).getOrientation(); + invTransform = (ui::Transform(invTransformOrient) * + ui::Transform(invTransform)).getOrientation(); } int winWidth = getActiveWidth(s); @@ -519,7 +520,7 @@ void Layer::setGeometry(const sp<const DisplayDevice>& display, uint32_t z) { // apply the layer's transform, followed by the display's global transform // here we're guaranteed that the layer's transform preserves rects Region activeTransparentRegion(getActiveTransparentRegion(s)); - Transform t = getTransform(); + ui::Transform t = getTransform(); Rect activeCrop = getCrop(s); if (!activeCrop.isEmpty()) { activeCrop = t.transform(activeCrop); @@ -557,7 +558,7 @@ void Layer::setGeometry(const sp<const DisplayDevice>& display, uint32_t z) { if (!frame.intersect(display->getViewport(), &frame)) { frame.clear(); } - const Transform& tr = display->getTransform(); + const ui::Transform& tr = display->getTransform(); Rect transformedFrame = tr.transform(frame); error = hwcLayer->setDisplayFrame(transformedFrame); if (error != HWC2::Error::None) { @@ -613,8 +614,8 @@ void Layer::setGeometry(const sp<const DisplayDevice>& display, uint32_t z) { * (NOTE: the matrices are multiplied in reverse order) */ - const Transform bufferOrientation(mCurrentTransform); - Transform transform(tr * t * bufferOrientation); + const ui::Transform bufferOrientation(mCurrentTransform); + ui::Transform transform(tr * t * bufferOrientation); if (getTransformToDisplayInverse()) { /* @@ -633,12 +634,12 @@ void Layer::setGeometry(const sp<const DisplayDevice>& display, uint32_t z) { * computation so it's enough to just omit it in the composition. * See comment in onDraw with ref to b/36727915 for why. */ - transform = Transform(invTransform) * tr * bufferOrientation; + transform = ui::Transform(invTransform) * tr * bufferOrientation; } // this gives us only the "orientation" component of the transform const uint32_t orientation = transform.getOrientation(); - if (orientation & Transform::ROT_INVALID) { + if (orientation & ui::Transform::ROT_INVALID) { // we can only handle simple transformation hwcInfo.forceClientComposition = true; } else { @@ -831,7 +832,7 @@ static void boundPoint(vec2* point, const Rect& crop) { void Layer::computeGeometry(const RenderArea& renderArea, Mesh& mesh, bool useIdentityTransform) const { const Layer::State& s(getDrawingState()); - const Transform renderAreaTransform(renderArea.getTransform()); + const ui::Transform renderAreaTransform(renderArea.getTransform()); const uint32_t height = renderArea.getHeight(); FloatRect win = computeBounds(); @@ -840,7 +841,7 @@ void Layer::computeGeometry(const RenderArea& renderArea, Mesh& mesh, vec2 rb = vec2(win.right, win.bottom); vec2 rt = vec2(win.right, win.top); - Transform layerTransform = getTransform(); + ui::Transform layerTransform = getTransform(); if (!useIdentityTransform) { lt = layerTransform.transform(lt); lb = layerTransform.transform(lb); @@ -1104,7 +1105,7 @@ uint32_t Layer::doTransaction(uint32_t flags) { // we may use linear filtering, if the matrix scales us const uint8_t type = getActiveTransform(c).getType(); - mNeedsFiltering = (!getActiveTransform(c).preserveRects() || (type >= Transform::SCALE)); + mNeedsFiltering = (!getActiveTransform(c).preserveRects() || type >= ui::Transform::SCALE); } // If the layer is hidden, signal and clear out all local sync points so @@ -1279,7 +1280,7 @@ bool Layer::setColor(const half3& color) { bool Layer::setMatrix(const layer_state_t::matrix22_t& matrix, bool allowNonRectPreservingTransforms) { - Transform t; + ui::Transform t; t.set(matrix.dsdx, matrix.dtdy, matrix.dtdx, matrix.dsdy); if (!allowNonRectPreservingTransforms && !t.preserveRects()) { @@ -1418,9 +1419,9 @@ void Layer::updateTransformHint(const sp<const DisplayDevice>& display) const { // The transform hint is used to improve performance, but we can // only have a single transform hint, it cannot // apply to all displays. - const Transform& planeTransform = display->getTransform(); + const ui::Transform& planeTransform = display->getTransform(); orientation = planeTransform.getOrientation(); - if (orientation & Transform::ROT_INVALID) { + if (orientation & ui::Transform::ROT_INVALID) { orientation = 0; } } @@ -1885,8 +1886,8 @@ void Layer::traverseChildrenInZOrder(LayerVector::StateSet stateSet, traverseChildrenInZOrderInner(layersInTree, stateSet, visitor); } -Transform Layer::getTransform() const { - Transform t; +ui::Transform Layer::getTransform() const { + ui::Transform t; const auto& p = mDrawingParent.promote(); if (p != nullptr) { t = p->getTransform(); @@ -1908,7 +1909,7 @@ Transform Layer::getTransform() const { } float sx = p->getActiveWidth(p->getDrawingState()) / static_cast<float>(bufferWidth); float sy = p->getActiveHeight(p->getDrawingState()) / static_cast<float>(bufferHeight); - Transform extraParentScaling; + ui::Transform extraParentScaling; extraParentScaling.set(sx, 0, 0, sy); t = t * extraParentScaling; } @@ -1942,8 +1943,8 @@ void Layer::writeToProto(LayerProto* layerInfo, LayerVector::StateSet stateSet) const LayerVector& children = useDrawing ? mDrawingChildren : mCurrentChildren; const State& state = useDrawing ? mDrawingState : mCurrentState; - Transform requestedTransform = state.active_legacy.transform; - Transform transform = getTransform(); + ui::Transform requestedTransform = state.active_legacy.transform; + ui::Transform transform = getTransform(); layerInfo->set_id(sequence); layerInfo->set_name(getName().c_str()); @@ -2011,7 +2012,7 @@ void Layer::writeToProto(LayerProto* layerInfo, LayerVector::StateSet stateSet) auto buffer = getBE().compositionInfo.mBuffer; if (buffer != nullptr) { LayerProtoHelper::writeToProto(buffer, layerInfo->mutable_active_buffer()); - LayerProtoHelper::writeToProto(Transform(mCurrentTransform), + LayerProtoHelper::writeToProto(ui::Transform(mCurrentTransform), layerInfo->mutable_buffer_transform()); } diff --git a/services/surfaceflinger/Layer.h b/services/surfaceflinger/Layer.h index 814adf78bb..6ebd668959 100644 --- a/services/surfaceflinger/Layer.h +++ b/services/surfaceflinger/Layer.h @@ -28,10 +28,11 @@ #include <ui/GraphicBuffer.h> #include <ui/PixelFormat.h> #include <ui/Region.h> +#include <ui/Transform.h> +#include <gui/BufferQueue.h> #include <gui/ISurfaceComposerClient.h> #include <gui/LayerState.h> -#include <gui/BufferQueue.h> #include <list> #include <cstdint> @@ -43,7 +44,6 @@ #include "MonitoredProducer.h" #include "SurfaceFlinger.h" #include "TimeStats/TimeStats.h" -#include "Transform.h" #include <layerproto/LayerProtoHeader.h> #include "DisplayHardware/HWComposer.h" @@ -101,7 +101,7 @@ public: struct Geometry { uint32_t w; uint32_t h; - Transform transform; + ui::Transform transform; inline bool operator==(const Geometry& rhs) const { return (w == rhs.w && h == rhs.h) && (transform.tx() == rhs.transform.tx()) && @@ -345,7 +345,7 @@ public: virtual Geometry getActiveGeometry(const Layer::State& s) const { return s.active_legacy; } virtual uint32_t getActiveWidth(const Layer::State& s) const { return s.active_legacy.w; } virtual uint32_t getActiveHeight(const Layer::State& s) const { return s.active_legacy.h; } - virtual Transform getActiveTransform(const Layer::State& s) const { + virtual ui::Transform getActiveTransform(const Layer::State& s) const { return s.active_legacy.transform; } virtual Region getActiveTransparentRegion(const Layer::State& s) const { @@ -545,7 +545,7 @@ public: virtual bool getTransformToDisplayInverse() const { return false; } - Transform getTransform() const; + ui::Transform getTransform() const; // Returns the Alpha of the Surface, accounting for the Alpha // of parent Surfaces in the hierarchy (alpha's will be multiplied diff --git a/services/surfaceflinger/LayerProtoHelper.cpp b/services/surfaceflinger/LayerProtoHelper.cpp index cc3955087a..3289e8f583 100644 --- a/services/surfaceflinger/LayerProtoHelper.cpp +++ b/services/surfaceflinger/LayerProtoHelper.cpp @@ -51,7 +51,8 @@ void LayerProtoHelper::writeToProto(const half4 color, ColorProto* colorProto) { colorProto->set_a(color.a); } -void LayerProtoHelper::writeToProto(const Transform& transform, TransformProto* transformProto) { +void LayerProtoHelper::writeToProto(const ui::Transform& transform, + TransformProto* transformProto) { transformProto->set_dsdx(transform[0][0]); transformProto->set_dtdx(transform[0][1]); transformProto->set_dsdy(transform[1][0]); diff --git a/services/surfaceflinger/LayerProtoHelper.h b/services/surfaceflinger/LayerProtoHelper.h index 860da63ed2..6df5aeaebf 100644 --- a/services/surfaceflinger/LayerProtoHelper.h +++ b/services/surfaceflinger/LayerProtoHelper.h @@ -16,13 +16,11 @@ #include <layerproto/LayerProtoHeader.h> +#include <math/vec4.h> #include <ui/GraphicBuffer.h> #include <ui/Rect.h> #include <ui/Region.h> - -#include <Transform.h> - -#include <math/vec4.h> +#include <ui/Transform.h> namespace android { namespace surfaceflinger { @@ -32,7 +30,7 @@ public: static void writeToProto(const FloatRect& rect, FloatRectProto* rectProto); static void writeToProto(const Region& region, RegionProto* regionProto); static void writeToProto(const half4 color, ColorProto* colorProto); - static void writeToProto(const Transform& transform, TransformProto* transformProto); + static void writeToProto(const ui::Transform& transform, TransformProto* transformProto); static void writeToProto(const sp<GraphicBuffer>& buffer, ActiveBufferProto* activeBufferProto); }; diff --git a/services/surfaceflinger/LayerRejecter.cpp b/services/surfaceflinger/LayerRejecter.cpp index bd59d17ac2..136cdc03f7 100644 --- a/services/surfaceflinger/LayerRejecter.cpp +++ b/services/surfaceflinger/LayerRejecter.cpp @@ -50,13 +50,13 @@ bool LayerRejecter::reject(const sp<GraphicBuffer>& buf, const BufferItem& item) // check that we received a buffer of the right size // (Take the buffer's orientation into account) - if (item.mTransform & Transform::ROT_90) { + if (item.mTransform & ui::Transform::ROT_90) { std::swap(bufWidth, bufHeight); } if (mTransformToDisplayInverse) { uint32_t invTransform = DisplayDevice::getPrimaryDisplayOrientationTransform(); - if (invTransform & Transform::ROT_90) { + if (invTransform & ui::Transform::ROT_90) { std::swap(bufWidth, bufHeight); } } diff --git a/services/surfaceflinger/RenderArea.cpp b/services/surfaceflinger/RenderArea.cpp index 1a8edf3e79..7f69ce4b3e 100644 --- a/services/surfaceflinger/RenderArea.cpp +++ b/services/surfaceflinger/RenderArea.cpp @@ -4,6 +4,27 @@ namespace android { +ui::Transform::orientation_flags fromRotation(ISurfaceComposer::Rotation rotation) { + switch (rotation) { + case ISurfaceComposer::eRotateNone: + return ui::Transform::ROT_0; + case ISurfaceComposer::eRotate90: + return ui::Transform::ROT_90; + case ISurfaceComposer::eRotate180: + return ui::Transform::ROT_180; + case ISurfaceComposer::eRotate270: + return ui::Transform::ROT_270; + } + ALOGE("Invalid rotation passed to captureScreen(): %d\n", rotation); + return ui::Transform::ROT_0; +} + +RenderArea::RenderArea(uint32_t reqHeight, uint32_t reqWidth, CaptureFill captureFill, + ISurfaceComposer::Rotation rotation) + : mReqHeight(reqHeight), mReqWidth(reqWidth), mCaptureFill(captureFill) { + mRotationFlags = fromRotation(rotation); +} + float RenderArea::getCaptureFillValue(CaptureFill captureFill) { switch(captureFill) { case CaptureFill::CLEAR: @@ -23,7 +44,7 @@ status_t RenderArea::updateDimensions(int displayRotation) { uint32_t width = getWidth(); uint32_t height = getHeight(); - if (mRotationFlags & Transform::ROT_90) { + if (mRotationFlags & ui::Transform::ROT_90) { std::swap(width, height); } diff --git a/services/surfaceflinger/RenderArea.h b/services/surfaceflinger/RenderArea.h index 96e4b5f48b..e38f4621d7 100644 --- a/services/surfaceflinger/RenderArea.h +++ b/services/surfaceflinger/RenderArea.h @@ -1,8 +1,8 @@ #pragma once +#include <gui/ISurfaceComposer.h> #include <ui/GraphicTypes.h> - -#include "Transform.h" +#include <ui/Transform.h> #include <functional> @@ -16,14 +16,11 @@ public: static float getCaptureFillValue(CaptureFill captureFill); RenderArea(uint32_t reqHeight, uint32_t reqWidth, CaptureFill captureFill, - ISurfaceComposer::Rotation rotation = ISurfaceComposer::eRotateNone) - : mReqHeight(reqHeight), mReqWidth(reqWidth), mCaptureFill(captureFill) { - mRotationFlags = Transform::fromRotation(rotation); - } + ISurfaceComposer::Rotation rotation = ISurfaceComposer::eRotateNone); virtual ~RenderArea() = default; - virtual const Transform& getTransform() const = 0; + virtual const ui::Transform& getTransform() const = 0; virtual Rect getBounds() const = 0; virtual int getHeight() const = 0; virtual int getWidth() const = 0; @@ -35,7 +32,7 @@ public: int getReqHeight() const { return mReqHeight; }; int getReqWidth() const { return mReqWidth; }; - Transform::orientation_flags getRotationFlags() const { return mRotationFlags; }; + ui::Transform::orientation_flags getRotationFlags() const { return mRotationFlags; }; status_t updateDimensions(int displayRotation); CaptureFill getCaptureFill() const { return mCaptureFill; }; @@ -43,7 +40,7 @@ public: private: uint32_t mReqHeight; uint32_t mReqWidth; - Transform::orientation_flags mRotationFlags; + ui::Transform::orientation_flags mRotationFlags; CaptureFill mCaptureFill; }; diff --git a/services/surfaceflinger/RenderEngine/Description.cpp b/services/surfaceflinger/RenderEngine/Description.cpp index c218e4da50..d4a2bb4356 100644 --- a/services/surfaceflinger/RenderEngine/Description.cpp +++ b/services/surfaceflinger/RenderEngine/Description.cpp @@ -19,9 +19,6 @@ #include <utils/TypeHelpers.h> -#include <GLES2/gl2.h> -#include <GLES2/gl2ext.h> - #include "Description.h" namespace android { diff --git a/services/surfaceflinger/RenderEngine/GLES20RenderEngine.cpp b/services/surfaceflinger/RenderEngine/GLES20RenderEngine.cpp index 4860f3c0da..21865941ad 100644 --- a/services/surfaceflinger/RenderEngine/GLES20RenderEngine.cpp +++ b/services/surfaceflinger/RenderEngine/GLES20RenderEngine.cpp @@ -167,7 +167,7 @@ size_t GLES20RenderEngine::getMaxViewportDims() const { void GLES20RenderEngine::setViewportAndProjection(size_t vpw, size_t vph, Rect sourceCrop, size_t hwh, bool yswap, - Transform::orientation_flags rotation) { + ui::Transform::orientation_flags rotation) { int32_t l = sourceCrop.left; int32_t r = sourceCrop.right; @@ -185,15 +185,15 @@ void GLES20RenderEngine::setViewportAndProjection(size_t vpw, size_t vph, Rect s // Apply custom rotation to the projection. float rot90InRadians = 2.0f * static_cast<float>(M_PI) / 4.0f; switch (rotation) { - case Transform::ROT_0: + case ui::Transform::ROT_0: break; - case Transform::ROT_90: + case ui::Transform::ROT_90: m = mat4::rotate(rot90InRadians, vec3(0, 0, 1)) * m; break; - case Transform::ROT_180: + case ui::Transform::ROT_180: m = mat4::rotate(rot90InRadians * 2.0f, vec3(0, 0, 1)) * m; break; - case Transform::ROT_270: + case ui::Transform::ROT_270: m = mat4::rotate(rot90InRadians * 3.0f, vec3(0, 0, 1)) * m; break; default: diff --git a/services/surfaceflinger/RenderEngine/GLES20RenderEngine.h b/services/surfaceflinger/RenderEngine/GLES20RenderEngine.h index cc8eb1dfab..f682225730 100644 --- a/services/surfaceflinger/RenderEngine/GLES20RenderEngine.h +++ b/services/surfaceflinger/RenderEngine/GLES20RenderEngine.h @@ -21,7 +21,6 @@ #include <sys/types.h> #include <GLES2/gl2.h> -#include <Transform.h> #include "Description.h" #include "ProgramCache.h" @@ -67,7 +66,7 @@ public: protected: virtual void dump(String8& result); virtual void setViewportAndProjection(size_t vpw, size_t vph, Rect sourceCrop, size_t hwh, - bool yswap, Transform::orientation_flags rotation); + bool yswap, ui::Transform::orientation_flags rotation); virtual void setupLayerBlending(bool premultipliedAlpha, bool opaque, bool disableTexture, const half4& color) override; diff --git a/services/surfaceflinger/RenderEngine/RenderEngine.h b/services/surfaceflinger/RenderEngine/RenderEngine.h index d2b218ee82..2ed2cc7611 100644 --- a/services/surfaceflinger/RenderEngine/RenderEngine.h +++ b/services/surfaceflinger/RenderEngine/RenderEngine.h @@ -24,9 +24,10 @@ #include <EGL/egl.h> #include <EGL/eglext.h> -#include <Transform.h> #include <android-base/unique_fd.h> #include <math/mat4.h> +#include <ui/GraphicTypes.h> +#include <ui/Transform.h> #define EGL_NO_CONFIG ((EGLConfig)0) @@ -105,7 +106,7 @@ public: // set-up virtual void checkErrors() const; virtual void setViewportAndProjection(size_t vpw, size_t vph, Rect sourceCrop, size_t hwh, - bool yswap, Transform::orientation_flags rotation) = 0; + bool yswap, ui::Transform::orientation_flags rotation) = 0; virtual void setupLayerBlending(bool premultipliedAlpha, bool opaque, bool disableTexture, const half4& color) = 0; virtual void setupLayerTexturing(const Texture& texture) = 0; diff --git a/services/surfaceflinger/RenderEngine/Surface.cpp b/services/surfaceflinger/RenderEngine/Surface.cpp index 0d20f1fd87..3bf42fb8f8 100644 --- a/services/surfaceflinger/RenderEngine/Surface.cpp +++ b/services/surfaceflinger/RenderEngine/Surface.cpp @@ -19,6 +19,7 @@ #include "RenderEngine.h" #include <log/log.h> +#include <ui/PixelFormat.h> namespace android { namespace RE { diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp index 0e88fa0a72..69dfc92f88 100644 --- a/services/surfaceflinger/SurfaceFlinger.cpp +++ b/services/surfaceflinger/SurfaceFlinger.cpp @@ -1821,7 +1821,7 @@ void SurfaceFlinger::rebuildLayerStacks() { Region dirtyRegion; Vector<sp<Layer>> layersSortedByZ; Vector<sp<Layer>> layersNeedingFences; - const Transform& tr = display->getTransform(); + const ui::Transform& tr = display->getTransform(); const Rect bounds = display->getBounds(); if (display->isPoweredOn()) { computeVisibleRegions(display, dirtyRegion, opaqueRegion); @@ -2639,7 +2639,7 @@ void SurfaceFlinger::computeVisibleRegions(const sp<const DisplayDevice>& displa const bool translucent = !layer->isOpaque(s); Rect bounds(layer->computeScreenBounds()); visibleRegion.set(bounds); - Transform tr = layer->getTransform(); + ui::Transform tr = layer->getTransform(); if (!visibleRegion.isEmpty()) { // Remove the transparent area from the visible region if (translucent) { @@ -2656,7 +2656,7 @@ void SurfaceFlinger::computeVisibleRegions(const sp<const DisplayDevice>& displa // compute the opaque region const int32_t layerOrientation = tr.getOrientation(); if (layer->getAlpha() == 1.0f && !translucent && - ((layerOrientation & Transform::ROT_INVALID) == false)) { + ((layerOrientation & ui::Transform::ROT_INVALID) == false)) { // the opaque region is the layer's footprint opaqueRegion = visibleRegion; } @@ -2919,7 +2919,7 @@ bool SurfaceFlinger::doComposeSurfaces(const sp<const DisplayDevice>& display) { */ ALOGV("Rendering client layers"); - const Transform& displayTransform = display->getTransform(); + const ui::Transform& displayTransform = display->getTransform(); bool firstLayer = true; for (auto& layer : display->getVisibleLayersSortedByZ()) { const Region clip(bounds.intersect( @@ -4845,7 +4845,7 @@ status_t SurfaceFlinger::captureLayers(const sp<IBinder>& layerHandleBinder, mCrop(crop), mFlinger(flinger), mChildrenOnly(childrenOnly) {} - const Transform& getTransform() const override { return mTransform; } + const ui::Transform& getTransform() const override { return mTransform; } Rect getBounds() const override { const Layer::State& layerState(mLayer->getDrawingState()); return Rect(mLayer->getActiveWidth(layerState), mLayer->getActiveHeight(layerState)); @@ -4897,7 +4897,7 @@ status_t SurfaceFlinger::captureLayers(const sp<IBinder>& layerHandleBinder, // In the "childrenOnly" case we reparent the children to a screenshot // layer which has no properties set and which does not draw. sp<ContainerLayer> screenshotParentLayer; - Transform mTransform; + ui::Transform mTransform; SurfaceFlinger* mFlinger; const bool mChildrenOnly; @@ -5051,17 +5051,17 @@ void SurfaceFlinger::renderScreenImplLocked(const RenderArea& renderArea, sourceCrop.setLeftTop(Point(0, 0)); sourceCrop.setRightBottom(Point(raWidth, raHeight)); } else if (mPrimaryDisplayOrientation != DisplayState::eOrientationDefault) { - Transform tr; + ui::Transform tr; uint32_t flags = 0x00; switch (mPrimaryDisplayOrientation) { case DisplayState::eOrientation90: - flags = Transform::ROT_90; + flags = ui::Transform::ROT_90; break; case DisplayState::eOrientation180: - flags = Transform::ROT_180; + flags = ui::Transform::ROT_180; break; case DisplayState::eOrientation270: - flags = Transform::ROT_270; + flags = ui::Transform::ROT_270; break; } tr.set(flags, raWidth, raHeight); @@ -5089,7 +5089,7 @@ void SurfaceFlinger::renderScreenImplLocked(const RenderArea& renderArea, // make sure to clear all GL error flags engine.checkErrors(); - Transform::orientation_flags rotation = renderArea.getRotationFlags(); + ui::Transform::orientation_flags rotation = renderArea.getRotationFlags(); if (mPrimaryDisplayOrientation != DisplayState::eOrientationDefault) { // convert hw orientation into flag presentation // here inverse transform needed @@ -5097,26 +5097,26 @@ void SurfaceFlinger::renderScreenImplLocked(const RenderArea& renderArea, uint8_t hw_flip_hv = 0x00; switch (mPrimaryDisplayOrientation) { case DisplayState::eOrientation90: - hw_rot_90 = Transform::ROT_90; - hw_flip_hv = Transform::ROT_180; + hw_rot_90 = ui::Transform::ROT_90; + hw_flip_hv = ui::Transform::ROT_180; break; case DisplayState::eOrientation180: - hw_flip_hv = Transform::ROT_180; + hw_flip_hv = ui::Transform::ROT_180; break; case DisplayState::eOrientation270: - hw_rot_90 = Transform::ROT_90; + hw_rot_90 = ui::Transform::ROT_90; break; } // transform flags operation // 1) flip H V if both have ROT_90 flag // 2) XOR these flags - uint8_t rotation_rot_90 = rotation & Transform::ROT_90; - uint8_t rotation_flip_hv = rotation & Transform::ROT_180; + uint8_t rotation_rot_90 = rotation & ui::Transform::ROT_90; + uint8_t rotation_flip_hv = rotation & ui::Transform::ROT_180; if (rotation_rot_90 & hw_rot_90) { - rotation_flip_hv = (~rotation_flip_hv) & Transform::ROT_180; + rotation_flip_hv = (~rotation_flip_hv) & ui::Transform::ROT_180; } - rotation = static_cast<Transform::orientation_flags> + rotation = static_cast<ui::Transform::orientation_flags> ((rotation_rot_90 ^ hw_rot_90) | (rotation_flip_hv ^ hw_flip_hv)); } diff --git a/services/surfaceflinger/Transform.h b/services/surfaceflinger/Transform.h deleted file mode 100644 index b11d0576c4..0000000000 --- a/services/surfaceflinger/Transform.h +++ /dev/null @@ -1,118 +0,0 @@ -/* - * Copyright (C) 2007 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_TRANSFORM_H -#define ANDROID_TRANSFORM_H - -#include <stdint.h> -#include <sys/types.h> - -#include <ui/Point.h> -#include <ui/Rect.h> -#include <math/vec2.h> -#include <math/vec3.h> - -#include <gui/ISurfaceComposer.h> - -#include <hardware/hardware.h> - -namespace android { - -class Region; - -// --------------------------------------------------------------------------- - -class Transform -{ -public: - Transform(); - Transform(const Transform& other); - explicit Transform(uint32_t orientation); - ~Transform(); - - enum orientation_flags { - ROT_0 = 0x00000000, - FLIP_H = HAL_TRANSFORM_FLIP_H, - FLIP_V = HAL_TRANSFORM_FLIP_V, - ROT_90 = HAL_TRANSFORM_ROT_90, - ROT_180 = FLIP_H|FLIP_V, - ROT_270 = ROT_180|ROT_90, - ROT_INVALID = 0x80 - }; - - static orientation_flags fromRotation(ISurfaceComposer::Rotation rotation); - - enum type_mask { - IDENTITY = 0, - TRANSLATE = 0x1, - ROTATE = 0x2, - SCALE = 0x4, - UNKNOWN = 0x8 - }; - - // query the transform - bool preserveRects() const; - uint32_t getType() const; - uint32_t getOrientation() const; - - const vec3& operator [] (size_t i) const; // returns column i - float tx() const; - float ty() const; - - // modify the transform - void reset(); - void set(float tx, float ty); - void set(float a, float b, float c, float d); - status_t set(uint32_t flags, float w, float h); - - // transform data - Rect makeBounds(int w, int h) const; - vec2 transform(int x, int y) const; - Region transform(const Region& reg) const; - Rect transform(const Rect& bounds, - bool roundOutwards = false) const; - FloatRect transform(const FloatRect& bounds) const; - Transform operator * (const Transform& rhs) const; - // assumes the last row is < 0 , 0 , 1 > - vec2 transform(const vec2& v) const; - vec3 transform(const vec3& v) const; - - Transform inverse() const; - - // for debugging - void dump(const char* name) const; - -private: - struct mat33 { - vec3 v[3]; - inline const vec3& operator [] (int i) const { return v[i]; } - inline vec3& operator [] (int i) { return v[i]; } - }; - - enum { UNKNOWN_TYPE = 0x80000000 }; - - uint32_t type() const; - static bool absIsOne(float f); - static bool isZero(float f); - - mat33 mMatrix; - mutable uint32_t mType; -}; - -// --------------------------------------------------------------------------- -}; // namespace android - -#endif /* ANDROID_TRANSFORM_H */ diff --git a/services/surfaceflinger/tests/unittests/mock/RenderEngine/MockRenderEngine.h b/services/surfaceflinger/tests/unittests/mock/RenderEngine/MockRenderEngine.h index 7814d32b19..36f74b6c51 100644 --- a/services/surfaceflinger/tests/unittests/mock/RenderEngine/MockRenderEngine.h +++ b/services/surfaceflinger/tests/unittests/mock/RenderEngine/MockRenderEngine.h @@ -56,7 +56,7 @@ public: MOCK_METHOD5(readPixels, void(size_t, size_t, size_t, size_t, uint32_t*)); MOCK_CONST_METHOD0(checkErrors, void()); MOCK_METHOD6(setViewportAndProjection, - void(size_t, size_t, Rect, size_t, bool, Transform::orientation_flags)); + void(size_t, size_t, Rect, size_t, bool, ui::Transform::orientation_flags)); MOCK_METHOD4(setupLayerBlending, void(bool, bool, bool, const half4&)); MOCK_METHOD1(setupLayerTexturing, void(const Texture&)); MOCK_METHOD0(setupLayerBlackedOut, void()); |