summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGreg Daniel <egdaniel@google.com>2020-05-14 15:38:26 -0400
committerGreg Daniel <egdaniel@google.com>2020-05-14 15:38:26 -0400
commitc7ad4080ba147d85f9fdbe3ca42ed4856fd8ebe6 (patch)
tree220ecc3f303060ecc7b2e9818331610977e88820
parent938f1c115db331d6f9ca44db0a527d6b687a9e20 (diff)
Update skia flush call APIs.
Test: manual Change-Id: I72fa57b04f1b4ea594063ddb4ce6af9507b1fcdb
-rw-r--r--libs/hwui/pipeline/skia/SkiaPipeline.cpp6
-rw-r--r--libs/hwui/renderthread/CacheManager.cpp9
-rw-r--r--libs/hwui/renderthread/VulkanManager.cpp23
-rw-r--r--libs/hwui/tests/unit/CacheManagerTests.cpp2
4 files changed, 27 insertions, 13 deletions
diff --git a/libs/hwui/pipeline/skia/SkiaPipeline.cpp b/libs/hwui/pipeline/skia/SkiaPipeline.cpp
index 5088494d6a07..89a1c713ef62 100644
--- a/libs/hwui/pipeline/skia/SkiaPipeline.cpp
+++ b/libs/hwui/pipeline/skia/SkiaPipeline.cpp
@@ -145,7 +145,7 @@ void SkiaPipeline::renderLayersImpl(const LayerUpdateQueue& layers, bool opaque)
if (cachedContext.get() != currentContext) {
if (cachedContext.get()) {
ATRACE_NAME("flush layers (context changed)");
- cachedContext->flush();
+ cachedContext->flushAndSubmit();
}
cachedContext.reset(SkSafeRef(currentContext));
}
@@ -153,7 +153,7 @@ void SkiaPipeline::renderLayersImpl(const LayerUpdateQueue& layers, bool opaque)
if (cachedContext.get()) {
ATRACE_NAME("flush layers");
- cachedContext->flush();
+ cachedContext->flushAndSubmit();
}
}
@@ -450,7 +450,7 @@ void SkiaPipeline::renderFrame(const LayerUpdateQueue& layers, const SkRect& cli
}
ATRACE_NAME("flush commands");
- surface->getCanvas()->flush();
+ surface->flushAndSubmit();
Properties::skpCaptureEnabled = previousSkpEnabled;
}
diff --git a/libs/hwui/renderthread/CacheManager.cpp b/libs/hwui/renderthread/CacheManager.cpp
index d177855e5a7d..2bd52d4d8990 100644
--- a/libs/hwui/renderthread/CacheManager.cpp
+++ b/libs/hwui/renderthread/CacheManager.cpp
@@ -101,7 +101,7 @@ void CacheManager::trimMemory(TrimMemoryMode mode) {
return;
}
- mGrContext->flush();
+ mGrContext->flushAndSubmit();
switch (mode) {
case TrimMemoryMode::Complete:
@@ -122,14 +122,17 @@ void CacheManager::trimMemory(TrimMemoryMode mode) {
// We must sync the cpu to make sure deletions of resources still queued up on the GPU actually
// happen.
- mGrContext->flush(kSyncCpu_GrFlushFlag, 0, nullptr);
+ GrFlushInfo info;
+ info.fFlags = kSyncCpu_GrFlushFlag;
+ mGrContext->flush(info);
+ mGrContext->submit(true);
}
void CacheManager::trimStaleResources() {
if (!mGrContext) {
return;
}
- mGrContext->flush();
+ mGrContext->flushAndSubmit();
mGrContext->purgeResourcesNotUsedInMs(std::chrono::seconds(30));
}
diff --git a/libs/hwui/renderthread/VulkanManager.cpp b/libs/hwui/renderthread/VulkanManager.cpp
index ba70afc8b8d2..3cb16074dd5e 100644
--- a/libs/hwui/renderthread/VulkanManager.cpp
+++ b/libs/hwui/renderthread/VulkanManager.cpp
@@ -459,7 +459,7 @@ Frame VulkanManager::dequeueNextBuffer(VulkanSurface* surface) {
// The following flush blocks the GPU immediately instead of waiting for other
// drawing ops. It seems dequeue_fence is not respected otherwise.
// TODO: remove the flush after finding why backendSemaphore is not working.
- bufferInfo->skSurface->flush();
+ bufferInfo->skSurface->flushAndSubmit();
}
}
}
@@ -525,9 +525,15 @@ void VulkanManager::swapBuffers(VulkanSurface* surface, const SkRect& dirtyRect)
int fenceFd = -1;
DestroySemaphoreInfo* destroyInfo =
new DestroySemaphoreInfo(mDestroySemaphore, mDevice, semaphore);
+ GrFlushInfo flushInfo;
+ flushInfo.fNumSemaphores = 1;
+ flushInfo.fSignalSemaphores = &backendSemaphore;
+ flushInfo.fFinishedProc = destroy_semaphore;
+ flushInfo.fFinishedContext = destroyInfo;
GrSemaphoresSubmitted submitted = bufferInfo->skSurface->flush(
- SkSurface::BackendSurfaceAccess::kPresent, kNone_GrFlushFlags, 1, &backendSemaphore,
- destroy_semaphore, destroyInfo);
+ SkSurface::BackendSurfaceAccess::kPresent, flushInfo);
+ ALOGE_IF(!bufferInfo->skSurface->getContext(), "Surface is not backed by gpu");
+ bufferInfo->skSurface->getContext()->submit();
if (submitted == GrSemaphoresSubmitted::kYes) {
VkSemaphoreGetFdInfoKHR getFdInfo;
getFdInfo.sType = VK_STRUCTURE_TYPE_SEMAPHORE_GET_FD_INFO_KHR;
@@ -612,7 +618,7 @@ status_t VulkanManager::fenceWait(int fence, GrContext* grContext) {
// Skia takes ownership of the semaphore and will delete it once the wait has finished.
grContext->wait(1, &beSemaphore);
- grContext->flush();
+ grContext->flushAndSubmit();
return OK;
}
@@ -648,8 +654,13 @@ status_t VulkanManager::createReleaseFence(int* nativeFence, GrContext* grContex
// Even if Skia fails to submit the semaphore, it will still call the destroy_semaphore callback
// which will remove its ref to the semaphore. The VulkanManager must still release its ref,
// when it is done with the semaphore.
- GrSemaphoresSubmitted submitted = grContext->flush(kNone_GrFlushFlags, 1, &backendSemaphore,
- destroy_semaphore, destroyInfo);
+ GrFlushInfo flushInfo;
+ flushInfo.fNumSemaphores = 1;
+ flushInfo.fSignalSemaphores = &backendSemaphore;
+ flushInfo.fFinishedProc = destroy_semaphore;
+ flushInfo.fFinishedContext = destroyInfo;
+ GrSemaphoresSubmitted submitted = grContext->flush(flushInfo);
+ grContext->submit();
if (submitted == GrSemaphoresSubmitted::kNo) {
ALOGE("VulkanManager::createReleaseFence: Failed to submit semaphore");
diff --git a/libs/hwui/tests/unit/CacheManagerTests.cpp b/libs/hwui/tests/unit/CacheManagerTests.cpp
index c83a3c88cbdd..a4d7b825520d 100644
--- a/libs/hwui/tests/unit/CacheManagerTests.cpp
+++ b/libs/hwui/tests/unit/CacheManagerTests.cpp
@@ -47,7 +47,7 @@ RENDERTHREAD_SKIA_PIPELINE_TEST(CacheManager, trimMemory) {
sk_sp<SkSurface> surface = SkSurface::MakeRenderTarget(grContext, SkBudgeted::kYes, info);
surface->getCanvas()->drawColor(SK_AlphaTRANSPARENT);
- grContext->flush();
+ grContext->flushAndSubmit();
surfaces.push_back(surface);
}