blob: 61df533cf78aa402f9fc2bef3d231c679b524a50 [file] [log] [blame]
joshualitt7a9c45c2015-05-26 12:32:23 -07001/*
2 * Copyright 2015 Google Inc.
3 *
4 * Use of this source code is governed by a BD-style license that can be
5 * found in the LICENSE file.
6 */
7
8#include "gm.h"
9
10#if SK_SUPPORT_GPU
11
12#include "SkCanvas.h"
13#include "SkSurface.h"
14#include "SkTextBlob.h"
bsalomon4ee6bd82015-05-27 13:23:23 -070015#include "GrContext.h"
joshualitt7a9c45c2015-05-26 12:32:23 -070016
17// This tests that we correctly regenerate textblobs after freeing all gpu resources crbug/491350
18namespace skiagm {
19class TextBlobUseAfterGpuFree : public GM {
20public:
21 TextBlobUseAfterGpuFree() { }
22
23protected:
24 SkString onShortName() override {
25 return SkString("textblobuseaftergpufree");
26 }
27
28 SkISize onISize() override {
29 return SkISize::Make(kWidth, kHeight);
30 }
31
32 void onDraw(SkCanvas* canvas) override {
33 // This GM exists to test a specific feature of the GPU backend.
halcanary96fcdcc2015-08-27 07:41:13 -070034 if (nullptr == canvas->getGrContext()) {
halcanary2a243382015-09-09 08:16:41 -070035 skiagm::GM::DrawGpuOnlyMessage(canvas);
joshualitt7a9c45c2015-05-26 12:32:23 -070036 return;
37 }
38
39 const char text[] = "Hamburgefons";
40
41 SkPaint paint;
caryclark1818acb2015-07-24 12:09:25 -070042 sk_tool_utils::set_portable_typeface(&paint);
caryclark85693c12015-07-20 10:48:01 -070043 paint.setAntiAlias(true);
joshualitt7a9c45c2015-05-26 12:32:23 -070044 paint.setTextSize(20);
45
46 SkTextBlobBuilder builder;
47
48 sk_tool_utils::add_to_text_blob(&builder, text, paint, 10, 10);
49
50 SkAutoTUnref<const SkTextBlob> blob(builder.build());
51
52 // draw textblob
53 SkRect rect = SkRect::MakeLTRB(0.f, 0.f, SkIntToScalar(kWidth), kHeight / 2.f);
54 SkPaint rectPaint;
55 rectPaint.setColor(0xffffffff);
56 canvas->drawRect(rect, rectPaint);
57 canvas->drawTextBlob(blob.get(), 10, 50, paint);
58
59 // This text should look fine
60 canvas->getGrContext()->freeGpuResources();
61 canvas->drawTextBlob(blob.get(), 10, 150, paint);
62 }
63
64private:
65 static const int kWidth = 200;
66 static const int kHeight = 200;
67
68 typedef GM INHERITED;
69};
70
71//////////////////////////////////////////////////////////////////////////////
72
halcanary385fe4d2015-08-26 13:07:48 -070073DEF_GM(return new TextBlobUseAfterGpuFree;)
joshualitt7a9c45c2015-05-26 12:32:23 -070074}
75#endif