diff options
| author | reed@google.com <reed@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2011-02-07 15:30:46 +0000 |
|---|---|---|
| committer | reed@google.com <reed@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2011-02-07 15:30:46 +0000 |
| commit | 82065d667f64e232bcde2ad849756a6096fcbe6f (patch) | |
| tree | b286676278e48522d5a1e153ff5696d3f2088cc8 /samplecode/SampleShaders.cpp | |
| parent | 18908aacf360eaacf5e6a98dd57342adb98cf463 (diff) | |
remove SkRefCnt safeRef() and safeUnref(), and replace the call-sites with
SkSafeRef() and SkSafeUnref().
This is basically a bug waiting to happen. An optimizing compiler can remove
checks for null on "this" if it chooses. However, SkRefCnt::safeRef() relies on
precisely this check...
void SkRefCnt::safeRef() {
if (this) {
this->ref();
}
}
Since a compiler might skip the if-clause, it breaks the intention of this
method, hence its removal.
static inline void SkSafeRef(SkRefCnt* obj) {
if (obj) {
obj->ref();
}
}
This form is not ignored by an optimizing compile, so we use it instead.
git-svn-id: http://skia.googlecode.com/svn/trunk@762 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'samplecode/SampleShaders.cpp')
| -rw-r--r-- | samplecode/SampleShaders.cpp | 34 |
1 files changed, 17 insertions, 17 deletions
diff --git a/samplecode/SampleShaders.cpp b/samplecode/SampleShaders.cpp index 115f9f5bce..86c8b17e82 100644 --- a/samplecode/SampleShaders.cpp +++ b/samplecode/SampleShaders.cpp @@ -36,7 +36,7 @@ static SkShader* make_bitmapfade(const SkBitmap& bm) shaderA->unref(); shaderB->unref(); mode->unref(); - + return shader; } @@ -51,19 +51,19 @@ public: SkPoint pts[2]; SkColor colors[2]; - + pts[0].set(0, 0); pts[1].set(SkIntToScalar(100), 0); colors[0] = SK_ColorRED; colors[1] = SK_ColorBLUE; SkShader* shaderA = SkGradientShader::CreateLinear(pts, colors, NULL, 2, SkShader::kClamp_TileMode); - + pts[0].set(0, 0); pts[1].set(0, SkIntToScalar(100)); colors[0] = SK_ColorBLACK; colors[1] = SkColorSetARGB(0x80, 0, 0, 0); SkShader* shaderB = SkGradientShader::CreateLinear(pts, colors, NULL, 2, SkShader::kClamp_TileMode); - + SkXfermode* mode = SkXfermode::Create(SkXfermode::kDstIn_Mode); fShader = new SkComposeShader(shaderA, shaderB, mode); @@ -73,9 +73,9 @@ public: } virtual ~ShaderView() { - fShader->safeUnref(); + SkSafeUnref(fShader); } - + protected: // overrides from SkEventSink virtual bool onQuery(SkEvent* evt) { @@ -85,21 +85,21 @@ protected: } return this->INHERITED::onQuery(evt); } - + void drawBG(SkCanvas* canvas) { // canvas->drawColor(0xFFDDDDDD); canvas->drawColor(SK_ColorWHITE); } - + virtual void onDraw(SkCanvas* canvas) { this->drawBG(canvas); - + canvas->drawBitmap(fBitmap, 0, 0); - + canvas->translate(SkIntToScalar(20), SkIntToScalar(120)); - + SkPaint paint; SkRect r; @@ -120,22 +120,22 @@ protected: canvas->drawRect(r, paint); paint.setShader(make_bitmapfade(fBitmap))->unref(); canvas->drawRect(r, paint); - + paint.setShader(new SkTransparentShader)->unref(); canvas->drawRect(r, paint); } - - virtual SkView::Click* onFindClickHandler(SkScalar x, SkScalar y) + + virtual SkView::Click* onFindClickHandler(SkScalar x, SkScalar y) { this->inval(NULL); return this->INHERITED::onFindClickHandler(x, y); } - - virtual bool onClick(Click* click) + + virtual bool onClick(Click* click) { return this->INHERITED::onClick(click); } - + private: typedef SkView INHERITED; }; |
