Early reject drawText calls that will not draw
bug:17114102
Prevents high contrast text from drawing invisible text.
Also fixes stroked text bounds calculation.
Change-Id: Iaeff51ead8b7b8ef2a1a0ca8b89598564e0d443f
diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp
index 721ab3d..bbf0551 100755
--- a/libs/hwui/OpenGLRenderer.cpp
+++ b/libs/hwui/OpenGLRenderer.cpp
@@ -2518,8 +2518,9 @@
status_t OpenGLRenderer::drawRoundRect(float left, float top, float right, float bottom,
float rx, float ry, const SkPaint* p) {
- if (currentSnapshot()->isIgnored() || quickRejectSetupScissor(left, top, right, bottom, p) ||
- (p->getAlpha() == 0 && getXfermode(p->getXfermode()) != SkXfermode::kClear_Mode)) {
+ if (currentSnapshot()->isIgnored()
+ || quickRejectSetupScissor(left, top, right, bottom, p)
+ || paintWillNotDraw(*p)) {
return DrawGlInfo::kStatusDone;
}
@@ -2536,9 +2537,9 @@
}
status_t OpenGLRenderer::drawCircle(float x, float y, float radius, const SkPaint* p) {
- if (currentSnapshot()->isIgnored() || quickRejectSetupScissor(x - radius, y - radius,
- x + radius, y + radius, p) ||
- (p->getAlpha() == 0 && getXfermode(p->getXfermode()) != SkXfermode::kClear_Mode)) {
+ if (currentSnapshot()->isIgnored()
+ || quickRejectSetupScissor(x - radius, y - radius, x + radius, y + radius, p)
+ || paintWillNotDraw(*p)) {
return DrawGlInfo::kStatusDone;
}
if (p->getPathEffect() != 0) {
@@ -2558,8 +2559,9 @@
status_t OpenGLRenderer::drawOval(float left, float top, float right, float bottom,
const SkPaint* p) {
- if (currentSnapshot()->isIgnored() || quickRejectSetupScissor(left, top, right, bottom, p) ||
- (p->getAlpha() == 0 && getXfermode(p->getXfermode()) != SkXfermode::kClear_Mode)) {
+ if (currentSnapshot()->isIgnored()
+ || quickRejectSetupScissor(left, top, right, bottom, p)
+ || paintWillNotDraw(*p)) {
return DrawGlInfo::kStatusDone;
}
@@ -2580,8 +2582,9 @@
status_t OpenGLRenderer::drawArc(float left, float top, float right, float bottom,
float startAngle, float sweepAngle, bool useCenter, const SkPaint* p) {
- if (currentSnapshot()->isIgnored() || quickRejectSetupScissor(left, top, right, bottom, p) ||
- (p->getAlpha() == 0 && getXfermode(p->getXfermode()) != SkXfermode::kClear_Mode)) {
+ if (currentSnapshot()->isIgnored()
+ || quickRejectSetupScissor(left, top, right, bottom, p)
+ || paintWillNotDraw(*p)) {
return DrawGlInfo::kStatusDone;
}
@@ -2614,8 +2617,9 @@
status_t OpenGLRenderer::drawRect(float left, float top, float right, float bottom,
const SkPaint* p) {
- if (currentSnapshot()->isIgnored() || quickRejectSetupScissor(left, top, right, bottom, p) ||
- (p->getAlpha() == 0 && getXfermode(p->getXfermode()) != SkXfermode::kClear_Mode)) {
+ if (currentSnapshot()->isIgnored()
+ || quickRejectSetupScissor(left, top, right, bottom, p)
+ || paintWillNotDraw(*p)) {
return DrawGlInfo::kStatusDone;
}