blob: f3f11d17da0ff2ba353b78813001c7e01d72727d [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
joshualitt7a9c45c2015-05-26 12:32:23 -070011#include "SkCanvas.h"
12#include "SkSurface.h"
13#include "SkTextBlob.h"
bsalomon4ee6bd82015-05-27 13:23:23 -070014#include "GrContext.h"
joshualitt7a9c45c2015-05-26 12:32:23 -070015
16// This tests that we correctly regenerate textblobs after freeing all gpu resources crbug/491350
17namespace skiagm {
18class TextBlobUseAfterGpuFree : public GM {
19public:
20 TextBlobUseAfterGpuFree() { }
21
22protected:
23 SkString onShortName() override {
24 return SkString("textblobuseaftergpufree");
25 }
26
27 SkISize onISize() override {
28 return SkISize::Make(kWidth, kHeight);
29 }
30
31 void onDraw(SkCanvas* canvas) override {
32 // This GM exists to test a specific feature of the GPU backend.
halcanary96fcdcc2015-08-27 07:41:13 -070033 if (nullptr == canvas->getGrContext()) {
halcanary2a243382015-09-09 08:16:41 -070034 skiagm::GM::DrawGpuOnlyMessage(canvas);
joshualitt7a9c45c2015-05-26 12:32:23 -070035 return;
36 }
37
38 const char text[] = "Hamburgefons";
39
Mike Reed28bd8822018-12-22 22:29:45 -050040 SkFont font(sk_tool_utils::create_portable_typeface(), 20);
41 auto blob = SkTextBlob::MakeFromText(text, strlen(text), font);
joshualitt7a9c45c2015-05-26 12:32:23 -070042
43 // draw textblob
44 SkRect rect = SkRect::MakeLTRB(0.f, 0.f, SkIntToScalar(kWidth), kHeight / 2.f);
45 SkPaint rectPaint;
46 rectPaint.setColor(0xffffffff);
47 canvas->drawRect(rect, rectPaint);
Mike Reed28bd8822018-12-22 22:29:45 -050048 canvas->drawTextBlob(blob, 20, 60, SkPaint());
joshualitt7a9c45c2015-05-26 12:32:23 -070049
50 // This text should look fine
51 canvas->getGrContext()->freeGpuResources();
Mike Reed28bd8822018-12-22 22:29:45 -050052 canvas->drawTextBlob(blob, 20, 160, SkPaint());
joshualitt7a9c45c2015-05-26 12:32:23 -070053 }
54
55private:
mtkleindbfd7ab2016-09-01 11:24:54 -070056 static constexpr int kWidth = 200;
57 static constexpr int kHeight = 200;
joshualitt7a9c45c2015-05-26 12:32:23 -070058
59 typedef GM INHERITED;
60};
61
62//////////////////////////////////////////////////////////////////////////////
63
halcanary385fe4d2015-08-26 13:07:48 -070064DEF_GM(return new TextBlobUseAfterGpuFree;)
joshualitt7a9c45c2015-05-26 12:32:23 -070065}