Revert "Created HardwareBufferRenderer to support rendering into..."
Revert submission 20579518-hardware_buffer_renderer
Reason for revert: The submission timing tracks with a major regression in CtsUiRenderingTestCases stability: https://screenshot.googleplex.com/3TxXCSP4xCZq7Zy.png and also some crash bugs, eg: https://b.corp.google.com/issues/264889058
Reverting to re-stabilize the tree
Reverted changes: /q/submissionid:20579518-hardware_buffer_renderer
Change-Id: I29f47da097257bdeaa963fccb9ad0dbe39ead063
diff --git a/libs/hwui/renderthread/CanvasContext.cpp b/libs/hwui/renderthread/CanvasContext.cpp
index ee1c2ec..c0f3086 100644
--- a/libs/hwui/renderthread/CanvasContext.cpp
+++ b/libs/hwui/renderthread/CanvasContext.cpp
@@ -153,7 +153,6 @@
void CanvasContext::destroy() {
stopDrawing();
- setHardwareBuffer(nullptr);
setSurface(nullptr);
setSurfaceControl(nullptr);
freePrefetchedLayers();
@@ -177,19 +176,6 @@
native_window_set_buffer_count(window, bufferCount);
}
-void CanvasContext::setHardwareBuffer(AHardwareBuffer* buffer) {
- if (mHardwareBuffer) {
- AHardwareBuffer_release(mHardwareBuffer);
- mHardwareBuffer = nullptr;
- }
-
- if (buffer) {
- AHardwareBuffer_acquire(buffer);
- mHardwareBuffer = buffer;
- }
- mRenderPipeline->setHardwareBuffer(mHardwareBuffer);
-}
-
void CanvasContext::setSurface(ANativeWindow* window, bool enableTimeout) {
ATRACE_CALL();
@@ -275,7 +261,7 @@
mRenderThread.removeFrameCallback(this);
mRenderPipeline->onStop();
mRenderThread.cacheManager().onContextStopped(this);
- } else if (mIsDirty && hasOutputTarget()) {
+ } else if (mIsDirty && hasSurface()) {
mRenderThread.postFrameCallback(this);
}
}
@@ -439,7 +425,7 @@
mIsDirty = true;
- if (CC_UNLIKELY(!hasOutputTarget())) {
+ if (CC_UNLIKELY(!hasSurface())) {
mCurrentFrameInfo->addFlag(FrameInfoFlags::SkippedFrame);
info.out.canDrawThisFrame = false;
return;
@@ -584,7 +570,7 @@
std::scoped_lock lock(mFrameMetricsReporterMutex);
drawResult = mRenderPipeline->draw(frame, windowDirty, dirty, mLightGeometry,
&mLayerUpdateQueue, mContentDrawBounds, mOpaque,
- mLightInfo, mRenderNodes, &(profiler()), mBufferParams);
+ mLightInfo, mRenderNodes, &(profiler()));
}
uint64_t frameCompleteNr = getFrameNumber();
diff --git a/libs/hwui/renderthread/CanvasContext.h b/libs/hwui/renderthread/CanvasContext.h
index a811670..0f6b736 100644
--- a/libs/hwui/renderthread/CanvasContext.h
+++ b/libs/hwui/renderthread/CanvasContext.h
@@ -125,13 +125,12 @@
// Won't take effect until next EGLSurface creation
void setSwapBehavior(SwapBehavior swapBehavior);
- void setHardwareBuffer(AHardwareBuffer* buffer);
void setSurface(ANativeWindow* window, bool enableTimeout = true);
void setSurfaceControl(ASurfaceControl* surfaceControl);
bool pauseSurface();
void setStopped(bool stopped);
- bool isStopped() { return mStopped || !hasOutputTarget(); }
- bool hasOutputTarget() const { return mNativeSurface.get() || mHardwareBuffer; }
+ bool isStopped() { return mStopped || !hasSurface(); }
+ bool hasSurface() const { return mNativeSurface.get(); }
void allocateBuffers();
void setLightAlpha(uint8_t ambientShadowAlpha, uint8_t spotShadowAlpha);
@@ -209,10 +208,6 @@
mASurfaceTransactionCallback = callback;
}
- void setHardwareBufferRenderParams(const HardwareBufferRenderParams& params) {
- mBufferParams = params;
- }
-
bool mergeTransaction(ASurfaceTransaction* transaction, ASurfaceControl* control);
void setPrepareSurfaceControlForWebviewCallback(const std::function<void()>& callback) {
@@ -267,9 +262,6 @@
int32_t mLastFrameHeight = 0;
RenderThread& mRenderThread;
-
- AHardwareBuffer* mHardwareBuffer = nullptr;
- HardwareBufferRenderParams mBufferParams;
std::unique_ptr<ReliableSurface> mNativeSurface;
// The SurfaceControl reference is passed from ViewRootImpl, can be set to
// NULL to remove the reference
diff --git a/libs/hwui/renderthread/DrawFrameTask.cpp b/libs/hwui/renderthread/DrawFrameTask.cpp
index fab2f46..ccdf715 100644
--- a/libs/hwui/renderthread/DrawFrameTask.cpp
+++ b/libs/hwui/renderthread/DrawFrameTask.cpp
@@ -26,7 +26,6 @@
#include "../Properties.h"
#include "../RenderNode.h"
#include "CanvasContext.h"
-#include "HardwareBufferRenderParams.h"
#include "RenderThread.h"
namespace android {
@@ -93,9 +92,6 @@
mContext->setSyncDelayDuration(systemTime(SYSTEM_TIME_MONOTONIC) - mSyncQueued);
mContext->setTargetSdrHdrRatio(mRenderSdrHdrRatio);
- auto hardwareBufferParams = mHardwareBufferParams;
- mContext->setHardwareBufferRenderParams(hardwareBufferParams);
- IRenderPipeline* pipeline = mContext->getRenderPipeline();
bool canUnblockUiThread;
bool canDrawThisFrame;
{
@@ -155,11 +151,6 @@
if (!canUnblockUiThread) {
unblockUiThread();
}
-
- if (pipeline->hasHardwareBuffer()) {
- auto fence = pipeline->flush();
- hardwareBufferParams.invokeRenderCallback(std::move(fence), 0);
- }
}
bool DrawFrameTask::syncFrameState(TreeInfo& info) {
@@ -185,9 +176,8 @@
// This is after the prepareTree so that any pending operations
// (RenderNode tree state, prefetched layers, etc...) will be flushed.
- bool hasTarget = mContext->hasOutputTarget();
- if (CC_UNLIKELY(!hasTarget || !canDraw)) {
- if (!hasTarget) {
+ if (CC_UNLIKELY(!mContext->hasSurface() || !canDraw)) {
+ if (!mContext->hasSurface()) {
mSyncResult |= SyncResult::LostSurfaceRewardIfFound;
} else {
// If we have a surface but can't draw we must be stopped
diff --git a/libs/hwui/renderthread/DrawFrameTask.h b/libs/hwui/renderthread/DrawFrameTask.h
index 4130d4a..4be8f6b 100644
--- a/libs/hwui/renderthread/DrawFrameTask.h
+++ b/libs/hwui/renderthread/DrawFrameTask.h
@@ -27,16 +27,8 @@
#include "../Rect.h"
#include "../TreeInfo.h"
#include "RenderTask.h"
-#include "SkColorSpace.h"
-#include "SwapBehavior.h"
-#include "utils/TimeUtils.h"
-#ifdef __ANDROID__ // Layoutlib does not support hardware acceleration
-#include <android/hardware_buffer.h>
-#endif
-#include "HardwareBufferRenderParams.h"
namespace android {
-
namespace uirenderer {
class DeferredLayerUpdater;
@@ -96,10 +88,6 @@
void forceDrawNextFrame() { mForceDrawFrame = true; }
- void setHardwareBufferRenderParams(const HardwareBufferRenderParams& params) {
- mHardwareBufferParams = params;
- }
-
void setRenderSdrHdrRatio(float ratio) { mRenderSdrHdrRatio = ratio; }
private:
@@ -126,7 +114,6 @@
int64_t mFrameInfo[UI_THREAD_FRAME_INFO_SIZE];
- HardwareBufferRenderParams mHardwareBufferParams;
std::function<std::function<void(bool)>(int32_t, int64_t)> mFrameCallback;
std::function<void(bool)> mFrameCommitCallback;
std::function<void()> mFrameCompleteCallback;
diff --git a/libs/hwui/renderthread/HardwareBufferRenderParams.h b/libs/hwui/renderthread/HardwareBufferRenderParams.h
deleted file mode 100644
index 91fe3f6..0000000
--- a/libs/hwui/renderthread/HardwareBufferRenderParams.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright (C) 2013 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 HARDWAREBUFFERRENDERER_H_
-#define HARDWAREBUFFERRENDERER_H_
-
-#include <android-base/unique_fd.h>
-#include <android/hardware_buffer.h>
-
-#include "SkColorSpace.h"
-#include "SkMatrix.h"
-#include "SkSurface.h"
-
-namespace android {
-namespace uirenderer {
-namespace renderthread {
-
-using namespace android::uirenderer::renderthread;
-
-using RenderCallback = std::function<void(android::base::unique_fd&&, int)>;
-
-class RenderProxy;
-
-class HardwareBufferRenderParams {
-public:
- HardwareBufferRenderParams() = default;
- HardwareBufferRenderParams(const SkMatrix& transform, const sk_sp<SkColorSpace>& colorSpace,
- RenderCallback&& callback)
- : mTransform(transform)
- , mColorSpace(colorSpace)
- , mRenderCallback(std::move(callback)) {}
- const SkMatrix& getTransform() const { return mTransform; }
- sk_sp<SkColorSpace> getColorSpace() const { return mColorSpace; }
-
- void invokeRenderCallback(android::base::unique_fd&& fenceFd, int status) {
- if (mRenderCallback) {
- std::invoke(mRenderCallback, std::move(fenceFd), status);
- }
- }
-
-private:
- SkMatrix mTransform = SkMatrix::I();
- sk_sp<SkColorSpace> mColorSpace = SkColorSpace::MakeSRGB();
- RenderCallback mRenderCallback = nullptr;
-};
-
-} // namespace renderthread
-} // namespace uirenderer
-} // namespace android
-#endif // HARDWAREBUFFERRENDERER_H_
diff --git a/libs/hwui/renderthread/IRenderPipeline.h b/libs/hwui/renderthread/IRenderPipeline.h
index c68fcdf..18cad31 100644
--- a/libs/hwui/renderthread/IRenderPipeline.h
+++ b/libs/hwui/renderthread/IRenderPipeline.h
@@ -16,19 +16,17 @@
#pragma once
-#include <SkColorSpace.h>
-#include <SkRect.h>
-#include <android-base/unique_fd.h>
-#include <utils/RefBase.h>
-
-#include "ColorMode.h"
#include "DamageAccumulator.h"
#include "FrameInfoVisualizer.h"
-#include "HardwareBufferRenderParams.h"
#include "LayerUpdateQueue.h"
#include "Lighting.h"
#include "SwapBehavior.h"
#include "hwui/Bitmap.h"
+#include "ColorMode.h"
+
+#include <SkColorSpace.h>
+#include <SkRect.h>
+#include <utils/RefBase.h>
class GrDirectContext;
@@ -66,14 +64,10 @@
const LightGeometry& lightGeometry, LayerUpdateQueue* layerUpdateQueue,
const Rect& contentDrawBounds, bool opaque, const LightInfo& lightInfo,
const std::vector<sp<RenderNode>>& renderNodes,
- FrameInfoVisualizer* profiler,
- const HardwareBufferRenderParams& bufferParams) = 0;
+ FrameInfoVisualizer* profiler) = 0;
virtual bool swapBuffers(const Frame& frame, bool drew, const SkRect& screenDirty,
FrameInfo* currentFrameInfo, bool* requireSwap) = 0;
virtual DeferredLayerUpdater* createTextureLayer() = 0;
- [[nodiscard]] virtual android::base::unique_fd flush() = 0;
- virtual void setHardwareBuffer(AHardwareBuffer* hardwareBuffer) = 0;
- virtual bool hasHardwareBuffer() = 0;
virtual bool setSurface(ANativeWindow* window, SwapBehavior swapBehavior) = 0;
virtual void onStop() = 0;
virtual bool isSurfaceReady() = 0;
diff --git a/libs/hwui/renderthread/RenderProxy.cpp b/libs/hwui/renderthread/RenderProxy.cpp
index 1e011c2..f8e2dee 100644
--- a/libs/hwui/renderthread/RenderProxy.cpp
+++ b/libs/hwui/renderthread/RenderProxy.cpp
@@ -85,18 +85,6 @@
mRenderThread.queue().runSync([this, name]() { mContext->setName(std::string(name)); });
}
-void RenderProxy::setHardwareBuffer(AHardwareBuffer* buffer) {
- if (buffer) {
- AHardwareBuffer_acquire(buffer);
- }
- mRenderThread.queue().post([this, hardwareBuffer = buffer]() mutable {
- mContext->setHardwareBuffer(hardwareBuffer);
- if (hardwareBuffer) {
- AHardwareBuffer_release(hardwareBuffer);
- }
- });
-}
-
void RenderProxy::setSurface(ANativeWindow* window, bool enableTimeout) {
if (window) { ANativeWindow_acquire(window); }
mRenderThread.queue().post([this, win = window, enableTimeout]() mutable {
@@ -352,10 +340,6 @@
mDrawFrameTask.setContentDrawBounds(left, top, right, bottom);
}
-void RenderProxy::setHardwareBufferRenderParams(const HardwareBufferRenderParams& params) {
- mDrawFrameTask.setHardwareBufferRenderParams(params);
-}
-
void RenderProxy::setPictureCapturedCallback(
const std::function<void(sk_sp<SkPicture>&&)>& callback) {
mRenderThread.queue().post(
diff --git a/libs/hwui/renderthread/RenderProxy.h b/libs/hwui/renderthread/RenderProxy.h
index 82072a6..5dd65a0 100644
--- a/libs/hwui/renderthread/RenderProxy.h
+++ b/libs/hwui/renderthread/RenderProxy.h
@@ -18,7 +18,6 @@
#define RENDERPROXY_H_
#include <SkRefCnt.h>
-#include <android/hardware_buffer.h>
#include <android/native_window.h>
#include <android/surface_control.h>
#include <cutils/compiler.h>
@@ -77,7 +76,7 @@
void setSwapBehavior(SwapBehavior swapBehavior);
bool loadSystemProperties();
void setName(const char* name);
- void setHardwareBuffer(AHardwareBuffer* buffer);
+
void setSurface(ANativeWindow* window, bool enableTimeout = true);
void setSurfaceControl(ASurfaceControl* surfaceControl);
void allocateBuffers();
@@ -85,7 +84,6 @@
void setStopped(bool stopped);
void setLightAlpha(uint8_t ambientShadowAlpha, uint8_t spotShadowAlpha);
void setLightGeometry(const Vector3& lightCenter, float lightRadius);
- void setHardwareBufferRenderParams(const HardwareBufferRenderParams& params);
void setOpaque(bool opaque);
float setColorMode(ColorMode mode);
void setRenderSdrHdrRatio(float ratio);