Reapply r5364 (Update ARM and NEON optimizations for S32A_Opaque_BlitRow32)

This reverts r5378.

Review URL: https://codereview.appspot.com/6815056

git-svn-id: http://skia.googlecode.com/svn/trunk@6727 2bbb7eff-a529-9590-31e7-b0007b416f81
This commit is contained in:
djsollen@google.com 2012-12-10 13:55:02 +00:00
parent 9f3e9a5a17
commit 57c29f7d6f
3 changed files with 59 additions and 14 deletions

View File

@ -1051,6 +1051,10 @@ void SampleWindow::draw(SkCanvas* canvas) {
this->updateMatrix();
}
if (fMeasureFPS) {
fMeasureFPS_Time = 0;
}
if (fNClip) {
this->INHERITED::draw(canvas);
SkBitmap orig = capture_bitmap(canvas);
@ -1111,6 +1115,11 @@ void SampleWindow::draw(SkCanvas* canvas) {
magnify(canvas);
}
if (fMeasureFPS && fMeasureFPS_Time) {
this->updateTitle();
this->postInvalDelay();
}
// do this last
fDevManager->publishCanvas(fDeviceType, canvas, this);
}
@ -1396,10 +1405,8 @@ void SampleWindow::afterChildren(SkCanvas* orig) {
}
// Do this after presentGL and other finishing, rather than in afterChild
if (fMeasureFPS && fMeasureFPS_Time) {
fMeasureFPS_Time = SkTime::GetMSecs() - fMeasureFPS_Time;
this->updateTitle();
this->postInvalDelay();
if (fMeasureFPS && fMeasureFPS_StartTime) {
fMeasureFPS_Time += SkTime::GetMSecs() - fMeasureFPS_StartTime;
}
// if ((fScrollTestX | fScrollTestY) != 0)
@ -1471,9 +1478,8 @@ void SampleWindow::beforeChild(SkView* child, SkCanvas* canvas) {
this->installDrawFilter(canvas);
if (fMeasureFPS) {
fMeasureFPS_Time = 0; // 0 means the child is not aware of repeat-draw
if (SampleView::SetRepeatDraw(child, FPS_REPEAT_COUNT)) {
fMeasureFPS_Time = SkTime::GetMSecs();
fMeasureFPS_StartTime = SkTime::GetMSecs();
}
} else {
(void)SampleView::SetRepeatDraw(child, 1);
@ -1778,6 +1784,13 @@ bool SampleWindow::onHandleChar(SkUnichar uni) {
}
switch (uni) {
case 'b':
{
postEventToSink(SkNEW_ARGS(SkEvent, ("PictFileView::toggleBBox")), curr_view(this));
this->updateTitle();
this->inval(NULL);
break;
}
case 'B':
// gIgnoreFastBlurRect = !gIgnoreFastBlurRect;
this->inval(NULL);

View File

@ -168,6 +168,7 @@ private:
bool fRequestGrabImage;
bool fMeasureFPS;
SkMSec fMeasureFPS_Time;
SkMSec fMeasureFPS_StartTime;
bool fMagnify;
SkISize fTileCount;

View File

@ -13,6 +13,7 @@
#include "SkGradientShader.h"
#include "SkGraphics.h"
#include "SkImageDecoder.h"
#include "SkOSFile.h"
#include "SkPath.h"
#include "SkPicture.h"
#include "SkRandom.h"
@ -31,8 +32,10 @@
class PictFileView : public SampleView {
SkString fFilename;
SkPicture* fPicture;
SkPicture* fBBoxPicture;
bool fUseBBox;
static SkPicture* LoadPicture(const char path[]) {
static SkPicture* LoadPicture(const char path[], bool useBBox) {
SkPicture* pic = NULL;
SkBitmap bm;
@ -60,16 +63,30 @@ class PictFileView : public SampleView {
p2.serialize(&writer);
}
}
return pic;
if (useBBox) {
SkPicture* bboxPicture = SkNEW(SkPicture);
pic->draw(bboxPicture->beginRecording(pic->width(), pic->height(),
SkPicture::kOptimizeForClippedPlayback_RecordingFlag));
bboxPicture->endRecording();
SkDELETE(pic);
return bboxPicture;
} else {
return pic;
}
}
public:
PictFileView(const char name[] = NULL) : fFilename(name) {
fPicture = NULL;
fBBoxPicture = NULL;
fUseBBox = false;
}
virtual ~PictFileView() {
SkSafeUnref(fPicture);
SkSafeUnref(fBBoxPicture);
}
protected:
@ -77,19 +94,33 @@ protected:
virtual bool onQuery(SkEvent* evt) {
if (SampleCode::TitleQ(*evt)) {
SkString name("P:");
name.append(fFilename);
const char* basename = strrchr(fFilename.c_str(), SkPATH_SEPARATOR);
name.append(basename ? basename+1: fFilename.c_str());
if (fUseBBox) {
name.append(" <bbox>");
}
SampleCode::TitleR(evt, name.c_str());
return true;
}
return this->INHERITED::onQuery(evt);
}
virtual void onDrawContent(SkCanvas* canvas) {
if (!fPicture) {
fPicture = LoadPicture(fFilename.c_str());
virtual bool onEvent(const SkEvent& evt) {
if (evt.isType("PictFileView::toggleBBox")) {
fUseBBox = !fUseBBox;
return true;
}
if (fPicture) {
canvas->drawPicture(*fPicture);
return this->INHERITED::onEvent(evt);
}
virtual void onDrawContent(SkCanvas* canvas) {
SkPicture** picture = fUseBBox ? &fBBoxPicture : &fPicture;
if (!*picture) {
*picture = LoadPicture(fFilename.c_str(), fUseBBox);
}
if (*picture) {
canvas->drawPicture(**picture);
}
}