Merge "Create HintSessionWrapper in RT right after CanvasContext" into tm-qpr-dev am: f69c4025ac
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/21144949 Change-Id: I779d83a63df14cb7ce2046b23b09669d1f5d0bb0 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -280,6 +280,11 @@ void DrawFrameTask::unblockUiThread() {
|
|||||||
mSignal.signal();
|
mSignal.signal();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DrawFrameTask::createHintSession(pid_t uiThreadId, pid_t renderThreadId) {
|
||||||
|
if (mHintSessionWrapper) return;
|
||||||
|
mHintSessionWrapper.emplace(uiThreadId, renderThreadId);
|
||||||
|
}
|
||||||
|
|
||||||
DrawFrameTask::HintSessionWrapper::HintSessionWrapper(int32_t uiThreadId, int32_t renderThreadId) {
|
DrawFrameTask::HintSessionWrapper::HintSessionWrapper(int32_t uiThreadId, int32_t renderThreadId) {
|
||||||
if (!Properties::useHintManager) return;
|
if (!Properties::useHintManager) return;
|
||||||
if (uiThreadId < 0 || renderThreadId < 0) return;
|
if (uiThreadId < 0 || renderThreadId < 0) return;
|
||||||
|
|||||||
@@ -90,6 +90,8 @@ public:
|
|||||||
|
|
||||||
void forceDrawNextFrame() { mForceDrawFrame = true; }
|
void forceDrawNextFrame() { mForceDrawFrame = true; }
|
||||||
|
|
||||||
|
void createHintSession(pid_t uiThreadId, pid_t renderThreadId);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
class HintSessionWrapper {
|
class HintSessionWrapper {
|
||||||
public:
|
public:
|
||||||
|
|||||||
@@ -38,11 +38,18 @@ namespace renderthread {
|
|||||||
RenderProxy::RenderProxy(bool translucent, RenderNode* rootRenderNode,
|
RenderProxy::RenderProxy(bool translucent, RenderNode* rootRenderNode,
|
||||||
IContextFactory* contextFactory)
|
IContextFactory* contextFactory)
|
||||||
: mRenderThread(RenderThread::getInstance()), mContext(nullptr) {
|
: mRenderThread(RenderThread::getInstance()), mContext(nullptr) {
|
||||||
mContext = mRenderThread.queue().runSync([&]() -> CanvasContext* {
|
pid_t uiThreadId = pthread_gettid_np(pthread_self());
|
||||||
return CanvasContext::create(mRenderThread, translucent, rootRenderNode, contextFactory);
|
pid_t renderThreadId = getRenderThreadTid();
|
||||||
|
mContext = mRenderThread.queue().runSync([=, this]() -> CanvasContext* {
|
||||||
|
CanvasContext* context =
|
||||||
|
CanvasContext::create(mRenderThread, translucent, rootRenderNode, contextFactory);
|
||||||
|
if (context != nullptr) {
|
||||||
|
mRenderThread.queue().post(
|
||||||
|
[=] { mDrawFrameTask.createHintSession(uiThreadId, renderThreadId); });
|
||||||
|
}
|
||||||
|
return context;
|
||||||
});
|
});
|
||||||
mDrawFrameTask.setContext(&mRenderThread, mContext, rootRenderNode,
|
mDrawFrameTask.setContext(&mRenderThread, mContext, rootRenderNode, uiThreadId, renderThreadId);
|
||||||
pthread_gettid_np(pthread_self()), getRenderThreadTid());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
RenderProxy::~RenderProxy() {
|
RenderProxy::~RenderProxy() {
|
||||||
|
|||||||
Reference in New Issue
Block a user