Merge "Add SkiaProfileRenderer to draw visual debugging info"

This commit is contained in:
TreeHugger Robot
2016-11-04 12:53:36 +00:00
committed by Android (Google) Code Review
5 changed files with 112 additions and 0 deletions

View File

@@ -25,6 +25,7 @@ hwui_src_files := \
pipeline/skia/SkiaDisplayList.cpp \
pipeline/skia/SkiaOpenGLPipeline.cpp \
pipeline/skia/SkiaPipeline.cpp \
pipeline/skia/SkiaProfileRenderer.cpp \
pipeline/skia/SkiaRecordingCanvas.cpp \
pipeline/skia/SkiaVulkanPipeline.cpp \
renderstate/Blend.cpp \

View File

@@ -20,6 +20,8 @@
#include "renderthread/EglManager.h"
#include "renderstate/RenderState.h"
#include "Readback.h"
#include "SkiaPipeline.h"
#include "SkiaProfileRenderer.h"
#include "utils/TraceUtils.h"
#include <android/native_window.h>
@@ -83,6 +85,16 @@ bool SkiaOpenGLPipeline::draw(const Frame& frame, const SkRect& screenDirty,
SkiaPipeline::updateLighting(lightGeometry, lightInfo);
renderFrame(*layerUpdateQueue, dirty, renderNodes, opaque, contentDrawBounds, surface);
layerUpdateQueue->clear();
// Draw visual debugging features
if (CC_UNLIKELY(Properties::showDirtyRegions
|| ProfileType::None == Properties::getProfileType())) {
SkCanvas* profileCanvas = surface->getCanvas();
SkiaProfileRenderer profileRenderer(profileCanvas);
profiler->draw(profileRenderer);
profileCanvas->flush();
}
return true;
}

View File

@@ -0,0 +1,45 @@
/*
* Copyright (C) 2016 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.
*/
#include "SkiaProfileRenderer.h"
namespace android {
namespace uirenderer {
void SkiaProfileRenderer::drawRect(float left, float top, float right, float bottom,
const SkPaint& paint) {
SkRect rect = SkRect::MakeLTRB(left, top, right, bottom);
mCanvas->drawRect(rect, paint);
}
void SkiaProfileRenderer::drawRects(const float* rects, int count, const SkPaint& paint) {
for (int index = 0; index + 4 <= count; index += 4) {
SkRect rect = SkRect::MakeLTRB(rects[index + 0], rects[index + 1], rects[index + 2],
rects[index + 3]);
mCanvas->drawRect(rect, paint);
}
}
uint32_t SkiaProfileRenderer::getViewportWidth() {
return mCanvas->imageInfo().width();
}
uint32_t SkiaProfileRenderer::getViewportHeight() {
return mCanvas->imageInfo().height();
}
} /* namespace uirenderer */
} /* namespace android */

View File

@@ -0,0 +1,42 @@
/*
* Copyright (C) 2016 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.
*/
#include "IProfileRenderer.h"
#include "BakedOpRenderer.h"
namespace android {
namespace uirenderer {
class SkiaProfileRenderer : public IProfileRenderer {
public:
SkiaProfileRenderer(SkCanvas* canvas)
: mCanvas(canvas) {}
void drawRect(float left, float top, float right, float bottom, const SkPaint& paint) override;
void drawRects(const float* rects, int count, const SkPaint& paint) override;
uint32_t getViewportWidth() override;
uint32_t getViewportHeight() override;
virtual ~SkiaProfileRenderer() {}
private:
// Does not have ownership.
SkCanvas* mCanvas;
};
} /* namespace uirenderer */
} /* namespace android */

View File

@@ -20,6 +20,8 @@
#include "renderthread/EglManager.h" // needed for Frame
#include "Readback.h"
#include "renderstate/RenderState.h"
#include "SkiaPipeline.h"
#include "SkiaProfileRenderer.h"
#include <SkTypes.h>
#include <WindowContextFactory_android.h>
@@ -69,6 +71,16 @@ bool SkiaVulkanPipeline::draw(const Frame& frame, const SkRect& screenDirty,
}
renderFrame(*layerUpdateQueue, dirty, renderNodes, opaque, contentDrawBounds, mBackbuffer);
layerUpdateQueue->clear();
// Draw visual debugging features
if (CC_UNLIKELY(Properties::showDirtyRegions
|| ProfileType::None == Properties::getProfileType())) {
SkCanvas* profileCanvas = mBackbuffer->getCanvas();
SkiaProfileRenderer profileRenderer(profileCanvas);
profiler->draw(profileRenderer);
profileCanvas->flush();
}
return true;
}