blob: b892c7fde11ec988c70776d32ae79cab9ff8be6e [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"
Mike Klein33d20552017-03-22 13:47:51 -04009#include "sk_tool_utils.h"
joshualitt7a9c45c2015-05-26 12:32:23 -070010
11#if SK_SUPPORT_GPU
12
13#include "SkCanvas.h"
14#include "SkSurface.h"
15#include "SkTextBlob.h"
bsalomon4ee6bd82015-05-27 13:23:23 -070016#include "GrContext.h"
joshualitt7a9c45c2015-05-26 12:32:23 -070017
18// This tests that we correctly regenerate textblobs after freeing all gpu resources crbug/491350
19namespace skiagm {
20class TextBlobUseAfterGpuFree : public GM {
21public:
22 TextBlobUseAfterGpuFree() { }
23
24protected:
25 SkString onShortName() override {
26 return SkString("textblobuseaftergpufree");
27 }
28
29 SkISize onISize() override {
30 return SkISize::Make(kWidth, kHeight);
31 }
32
33 void onDraw(SkCanvas* canvas) override {
34 // This GM exists to test a specific feature of the GPU backend.
halcanary96fcdcc2015-08-27 07:41:13 -070035 if (nullptr == canvas->getGrContext()) {
halcanary2a243382015-09-09 08:16:41 -070036 skiagm::GM::DrawGpuOnlyMessage(canvas);
joshualitt7a9c45c2015-05-26 12:32:23 -070037 return;
38 }
39
40 const char text[] = "Hamburgefons";
41
42 SkPaint paint;
caryclark1818acb2015-07-24 12:09:25 -070043 sk_tool_utils::set_portable_typeface(&paint);
caryclark85693c12015-07-20 10:48:01 -070044 paint.setAntiAlias(true);
joshualitt7a9c45c2015-05-26 12:32:23 -070045 paint.setTextSize(20);
46
47 SkTextBlobBuilder builder;
48
49 sk_tool_utils::add_to_text_blob(&builder, text, paint, 10, 10);
50
fmalita37283c22016-09-13 10:00:23 -070051 sk_sp<SkTextBlob> blob(builder.make());
joshualitt7a9c45c2015-05-26 12:32:23 -070052
53 // draw textblob
54 SkRect rect = SkRect::MakeLTRB(0.f, 0.f, SkIntToScalar(kWidth), kHeight / 2.f);
55 SkPaint rectPaint;
56 rectPaint.setColor(0xffffffff);
57 canvas->drawRect(rect, rectPaint);
fmalita37283c22016-09-13 10:00:23 -070058 canvas->drawTextBlob(blob, 10, 50, paint);
joshualitt7a9c45c2015-05-26 12:32:23 -070059
60 // This text should look fine
61 canvas->getGrContext()->freeGpuResources();
fmalita37283c22016-09-13 10:00:23 -070062 canvas->drawTextBlob(blob, 10, 150, paint);
joshualitt7a9c45c2015-05-26 12:32:23 -070063 }
64
65private:
mtkleindbfd7ab2016-09-01 11:24:54 -070066 static constexpr int kWidth = 200;
67 static constexpr int kHeight = 200;
joshualitt7a9c45c2015-05-26 12:32:23 -070068
69 typedef GM INHERITED;
70};
71
72//////////////////////////////////////////////////////////////////////////////
73
halcanary385fe4d2015-08-26 13:07:48 -070074DEF_GM(return new TextBlobUseAfterGpuFree;)
joshualitt7a9c45c2015-05-26 12:32:23 -070075}
76#endif