80,351
社区成员
发帖
与我相关
我的任务
分享
After seeing this response, I spent some time to figure out exactly what I
was doing now that was causing this to appear in the logs so much. I was
puzzled because I wasn't using many styles or colors, the same font, same
color. I turned off alpha blending, and removed all the items I was drawing
until I was left with 1, and it was still overloading the cache. I narrowed
it down to doing:
canvas.save();
canvas.rotate(rotationAngle, p.x, p.y); // this is the offending line
canvas.drawText(text, p.x, p.y, paint);
canvas.restore();
If I rotate and then draw text (this is an AR type implementation where the
text is rotating with the phone), this is where the font cache fills up,
with just 1 static piece of text. Commenting out the above line doesn't.
Even with a large number of text items, NOT rotating the canvas before
drawing the text, doesn't fill the cache.
This seems kind of strange to me that this would fill the cache, but, is
there another way to do this to not fill the cache?
On Mon, Jun 20, 2011 at 7:43 PM, Dianne Hackborn <hack...@android.com>wrote:
> Well having it printed every second or so indicates you are pretty severely
> thrashing the cache, which can certainly impact performance. For example
> drawing your UI may not be fitting in the cache so each frame you draw
> requires re-rendering glyphs back in to the cache. If that is the case,
> look at doing things like reducing the number of distinct font sizes or
> families/styles you are using to have less impact on the cache.
--
Adam Ratana
adam.rat...@gmail.com
e) 例程
i )画点、线、圆、文字
#include "SkBitmap.h"
#include "SkDevice.h"
#include "SkPaint.h"
#include "SkRect.h"
#include "SkImageEncoder.h"
#include "SkTypeface.h"
using namespace std;
int main()
{
SkBitmap bitmap;
bitmap.setConfig(SkBitmap::kARGB_8888_Config,320,240);
bitmap.allocPixels();
SkCanvas canvas(new SkDevice(bitmap));
SkPaint paint;
// draw points with red.
paint.setARGB(255, 255, 0, 0);
paint.setStrokeWidth(4);
canvas.drawPoint(40,30, paint);
canvas.drawPoint(80,60, paint);
canvas.drawPoint(120,90, paint);
//draw a line with green.
paint.setARGB(255, 0, 255, 0);
paint.setStrokeWidth(4);
canvas.drawLine(160,10,320,110,paint);
//draw a circle with bule.
paint.setARGB(255, 0, 0, 255);
canvas.drawCircle(80,180,50,paint);
//draw text with red
SkTypeface *font = SkTypeface::CreateFromFile("simkai.ttf");
if ( font )
{
paint.setARGB(255, 255, 0, 0);
paint.setTypeface( font );
paint.setTextSize(24);
canvas.drawText("HELLO!:)", 8, 200, 180, paint);
}
SkImageEncoder::EncodeFile("snapshot.png", bitmap,SkImageEncoder::kPNG_Type,100);
return 0;
}
purging 191k from font cache [26 entries]
purging 191k from font cache [26 entries]
purging 191k from font cache [26 entries]
process com.android.deskclock(pid 1046) has died.
---no context for glyph 0