summaryrefslogtreecommitdiff
path: root/libs/hwui/renderthread/CanvasContext.cpp
diff options
context:
space:
mode:
authorJiyong Park <jiyong@google.com>2018-08-02 17:02:45 +0900
committerJiyong Park <jiyong@google.com>2018-08-02 18:07:54 +0900
commit1581c348fc5d6cbf1673b3dbc5960637f891d488 (patch)
tree31e9444210520c28f42b9445fbc53daf68e5a0be /libs/hwui/renderthread/CanvasContext.cpp
parent7a01a307753309f198eacbb8a36e15428b38bbe7 (diff)
parentdecdaee091799aced8169d45632c923e2605214e (diff)
Merge QPR1.180718.001
Conflicts: core/java/android/provider/Settings.java core/jni/android_view_InputEventReceiver.cpp core/res/res/values/config.xml core/res/res/values/symbols.xml media/jni/Android.bp packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java packages/SettingsLib/tests/robotests/src/com/android/settingslib/fuelgauge/PowerWhitelistBackendTest.java packages/SystemUI/res/layout/status_bar_mobile_signal_group.xml packages/SystemUI/res/values/config.xml packages/SystemUI/src/com/android/keyguard/KeyguardConstants.java packages/SystemUI/src/com/android/systemui/statusbar/StatusBarMobileView.java services/core/java/com/android/server/ConnectivityService.java services/core/java/com/android/server/NetworkTimeUpdateService.java services/core/java/com/android/server/StorageManagerService.java services/core/java/com/android/server/Watchdog.java services/core/java/com/android/server/am/ActiveServices.java services/core/java/com/android/server/am/ActivityManagerService.java services/core/java/com/android/server/am/ActivityStack.java services/core/java/com/android/server/am/AppTaskImpl.java services/core/java/com/android/server/audio/AudioService.java services/core/java/com/android/server/wm/DisplayContent.java services/tests/uiservicestests/src/com/android/server/notification/NotificationRecordTest.java telephony/java/android/telephony/CarrierConfigManager.java telephony/java/android/telephony/ims/ImsReasonInfo.java telephony/java/android/telephony/ims/feature/MmTelFeature.java telephony/java/com/android/internal/telephony/ISmsBaseImpl.java Change-Id: I3f98340699f9e31be03eaf23fdea70803c4cef42
Diffstat (limited to 'libs/hwui/renderthread/CanvasContext.cpp')
-rw-r--r--libs/hwui/renderthread/CanvasContext.cpp115
1 files changed, 12 insertions, 103 deletions
diff --git a/libs/hwui/renderthread/CanvasContext.cpp b/libs/hwui/renderthread/CanvasContext.cpp
index aed0620166dd..5d7252304bf2 100644
--- a/libs/hwui/renderthread/CanvasContext.cpp
+++ b/libs/hwui/renderthread/CanvasContext.cpp
@@ -22,22 +22,18 @@
#include "EglManager.h"
#include "Frame.h"
#include "LayerUpdateQueue.h"
-#include "OpenGLPipeline.h"
#include "Properties.h"
#include "RenderThread.h"
#include "hwui/Canvas.h"
#include "pipeline/skia/SkiaOpenGLPipeline.h"
#include "pipeline/skia/SkiaPipeline.h"
#include "pipeline/skia/SkiaVulkanPipeline.h"
-#include "protos/hwui.pb.h"
#include "renderstate/RenderState.h"
-#include "renderstate/Stencil.h"
#include "utils/GLUtils.h"
#include "utils/TimeUtils.h"
#include "../Properties.h"
#include <cutils/properties.h>
-#include <google/protobuf/io/zero_copy_stream_impl.h>
#include <private/hwui/DrawGlInfo.h>
#include <strings.h>
@@ -51,8 +47,6 @@
#define TRIM_MEMORY_COMPLETE 80
#define TRIM_MEMORY_UI_HIDDEN 20
-#define ENABLE_RENDERNODE_SERIALIZATION false
-
#define LOG_FRAMETIME_MMA 0
#if LOG_FRAMETIME_MMA
@@ -70,9 +64,6 @@ CanvasContext* CanvasContext::create(RenderThread& thread, bool translucent,
auto renderType = Properties::getRenderPipelineType();
switch (renderType) {
- case RenderPipelineType::OpenGL:
- return new CanvasContext(thread, translucent, rootRenderNode, contextFactory,
- std::make_unique<OpenGLPipeline>(thread));
case RenderPipelineType::SkiaGL:
return new CanvasContext(thread, translucent, rootRenderNode, contextFactory,
std::make_unique<skiapipeline::SkiaOpenGLPipeline>(thread));
@@ -87,28 +78,13 @@ CanvasContext* CanvasContext::create(RenderThread& thread, bool translucent,
}
void CanvasContext::destroyLayer(RenderNode* node) {
- auto renderType = Properties::getRenderPipelineType();
- switch (renderType) {
- case RenderPipelineType::OpenGL:
- OpenGLPipeline::destroyLayer(node);
- break;
- case RenderPipelineType::SkiaGL:
- case RenderPipelineType::SkiaVulkan:
- skiapipeline::SkiaPipeline::destroyLayer(node);
- break;
- default:
- LOG_ALWAYS_FATAL("canvas context type %d not supported", (int32_t)renderType);
- break;
- }
+ skiapipeline::SkiaPipeline::destroyLayer(node);
}
void CanvasContext::invokeFunctor(const RenderThread& thread, Functor* functor) {
ATRACE_CALL();
auto renderType = Properties::getRenderPipelineType();
switch (renderType) {
- case RenderPipelineType::OpenGL:
- OpenGLPipeline::invokeFunctor(thread, functor);
- break;
case RenderPipelineType::SkiaGL:
skiapipeline::SkiaOpenGLPipeline::invokeFunctor(thread, functor);
break;
@@ -122,19 +98,7 @@ void CanvasContext::invokeFunctor(const RenderThread& thread, Functor* functor)
}
void CanvasContext::prepareToDraw(const RenderThread& thread, Bitmap* bitmap) {
- auto renderType = Properties::getRenderPipelineType();
- switch (renderType) {
- case RenderPipelineType::OpenGL:
- OpenGLPipeline::prepareToDraw(thread, bitmap);
- break;
- case RenderPipelineType::SkiaGL:
- case RenderPipelineType::SkiaVulkan:
- skiapipeline::SkiaPipeline::prepareToDraw(thread, bitmap);
- break;
- default:
- LOG_ALWAYS_FATAL("canvas context type %d not supported", (int32_t)renderType);
- break;
- }
+ skiapipeline::SkiaPipeline::prepareToDraw(thread, bitmap);
}
CanvasContext::CanvasContext(RenderThread& thread, bool translucent, RenderNode* rootRenderNode,
@@ -290,7 +254,7 @@ bool CanvasContext::isSwapChainStuffed() {
// If there's a multi-frameInterval gap we effectively already dropped a frame,
// so consider the queue healthy.
- if (swapA.swapCompletedTime - swapB.swapCompletedTime > frameInterval * 3) {
+ if (std::abs(swapA.swapCompletedTime - swapB.swapCompletedTime) > frameInterval * 3) {
return false;
}
@@ -622,37 +586,15 @@ void CanvasContext::destroyHardwareResources() {
}
void CanvasContext::trimMemory(RenderThread& thread, int level) {
- auto renderType = Properties::getRenderPipelineType();
- switch (renderType) {
- case RenderPipelineType::OpenGL: {
- // No context means nothing to free
- if (!thread.eglManager().hasEglContext()) return;
- ATRACE_CALL();
- if (level >= TRIM_MEMORY_COMPLETE) {
- thread.renderState().flush(Caches::FlushMode::Full);
- thread.eglManager().destroy();
- } else if (level >= TRIM_MEMORY_UI_HIDDEN) {
- thread.renderState().flush(Caches::FlushMode::Moderate);
- }
- break;
- }
- case RenderPipelineType::SkiaGL:
- case RenderPipelineType::SkiaVulkan: {
- // No context means nothing to free
- if (!thread.getGrContext()) return;
- ATRACE_CALL();
- if (level >= TRIM_MEMORY_COMPLETE) {
- thread.cacheManager().trimMemory(CacheManager::TrimMemoryMode::Complete);
- thread.eglManager().destroy();
- thread.vulkanManager().destroy();
- } else if (level >= TRIM_MEMORY_UI_HIDDEN) {
- thread.cacheManager().trimMemory(CacheManager::TrimMemoryMode::UiHidden);
- }
- break;
- }
- default:
- LOG_ALWAYS_FATAL("canvas context type %d not supported", (int32_t)renderType);
- break;
+ ATRACE_CALL();
+ if (!thread.getGrContext()) return;
+ ATRACE_CALL();
+ if (level >= TRIM_MEMORY_COMPLETE) {
+ thread.cacheManager().trimMemory(CacheManager::TrimMemoryMode::Complete);
+ thread.destroyGlContext();
+ thread.vulkanManager().destroy();
+ } else if (level >= TRIM_MEMORY_UI_HIDDEN) {
+ thread.cacheManager().trimMemory(CacheManager::TrimMemoryMode::UiHidden);
}
}
@@ -673,39 +615,6 @@ void CanvasContext::setName(const std::string&& name) {
mJankTracker.setDescription(JankTrackerType::Window, std::move(name));
}
-void CanvasContext::serializeDisplayListTree() {
-#if ENABLE_RENDERNODE_SERIALIZATION
- using namespace google::protobuf::io;
- char package[128];
- // Check whether tracing is enabled for this process.
- FILE* file = fopen("/proc/self/cmdline", "r");
- if (file) {
- if (!fgets(package, 128, file)) {
- ALOGE("Error reading cmdline: %s (%d)", strerror(errno), errno);
- fclose(file);
- return;
- }
- fclose(file);
- } else {
- ALOGE("Error opening /proc/self/cmdline: %s (%d)", strerror(errno), errno);
- return;
- }
- char path[1024];
- snprintf(path, 1024, "/data/data/%s/cache/rendertree_dump", package);
- int fd = open(path, O_CREAT | O_WRONLY, S_IRWXU | S_IRGRP | S_IROTH);
- if (fd == -1) {
- ALOGD("Failed to open '%s'", path);
- return;
- }
- proto::RenderNode tree;
- // TODO: Streaming writes?
- mRootRenderNode->copyTo(&tree);
- std::string data = tree.SerializeAsString();
- write(fd, data.c_str(), data.length());
- close(fd);
-#endif
-}
-
void CanvasContext::waitOnFences() {
if (mFrameFences.size()) {
ATRACE_CALL();