Flutter Engine
The Flutter Engine
Sk4fBench.cpp
Go to the documentation of this file.
1/*
2 * Copyright 2015 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8#include "bench/Benchmark.h"
10#include "src/base/SkVx.h"
11
12// Writing into this array prevents the loops from being compiled away.
13static volatile float blackhole[4];
14
15template <typename T>
18
19 const char* onGetName() override {
20 switch (sizeof(T)) {
21 case 1: return "Sk4f_roundtrip_u8";
22 case 2: return "Sk4f_roundtrip_u16";
23 case 4: return "Sk4f_roundtrip_int";
24 }
25 SkASSERT(false);
26 return "";
27 }
28
30
31 void onDraw(int loops, SkCanvas* canvas) override {
32 skvx::float4 fs(1,2,3,4);
33 while (loops --> 0) {
34 fs = skvx::cast<float>(skvx::cast<T>(fs));
35 }
36 fs.store(const_cast<float*>(blackhole));
37 }
38};
42
43struct Sk4fFloorBench : public Benchmark {
45
46 const char* onGetName() override { return "Sk4f_floor"; }
47 bool isSuitableFor(Backend backend) override { return backend == Backend::kNonRendering; }
48
49 void onDraw(int loops, SkCanvas* canvas) override {
50 skvx::float4 fs(1,2,3,4);
51 while (loops --> 0) {
52 fs = floor(fs);
53 }
54 fs.store(const_cast<float*>(blackhole));
55 }
56};
57DEF_BENCH(return new Sk4fFloorBench;)
58
60 const char* onGetName() override { return "Sk4f_gradient"; }
61 bool isSuitableFor(Backend backend) override { return backend == Backend::kNonRendering; }
62
63 SkPMColor fDevice[100];
64 void onDraw(int loops, SkCanvas*) override {
65 skvx::float4 c0(0,0,255,255),
66 c1(255,0,0,255),
67 dc = c1 - c0,
68 fx(0.1f),
69 dx(0.002f),
70 dcdx(dc*dx),
71 dcdx4(dcdx+dcdx+dcdx+dcdx);
72
73 for (int n = 0; n < loops; n++) {
74 auto a = c0 + dc*fx + 0.5f, // add an extra 0.5f to get rounding for free.
75 b = a + dcdx,
76 c = b + dcdx,
77 d = c + dcdx;
78 for (size_t i = 0; i < std::size(fDevice); i += 4) {
79 skvx::cast<uint8_t>(a).store(fDevice + i + 0);
80 skvx::cast<uint8_t>(b).store(fDevice + i + 1);
81 skvx::cast<uint8_t>(c).store(fDevice + i + 2);
82 skvx::cast<uint8_t>(d).store(fDevice + i + 3);
83 a = a + dcdx4;
84 b = b + dcdx4;
85 c = c + dcdx4;
86 d = d + dcdx4;
87 }
88 }
89 }
90};
#define DEF_BENCH(code)
Definition: Benchmark.h:20
const char * backend
static volatile float blackhole[4]
Definition: Sk4fBench.cpp:13
#define SkASSERT(cond)
Definition: SkAssert.h:116
uint32_t SkPMColor
Definition: SkColor.h:205
VULKAN_HPP_DEFAULT_DISPATCH_LOADER_DYNAMIC_STORAGE auto & d
Definition: main.cc:19
static bool b
struct MyStruct a[10]
skia_private::AutoTArray< sk_sp< SkImageFilter > > filters TypedMatrix matrix TypedMatrix matrix SkScalar dx
Definition: SkRecords.h:208
it will be possible to load the file into Perfetto s trace viewer disable asset Prevents usage of any non test fonts unless they were explicitly Loaded via prefetched default font Indicates whether the embedding started a prefetch of the default font manager before creating the engine run In non interactive keep the shell running after the Dart script has completed enable serial On low power devices with low core running concurrent GC tasks on threads can cause them to contend with the UI thread which could potentially lead to jank This option turns off all concurrent GC activities domain network JSON encoded network policy per domain This overrides the DisallowInsecureConnections switch Embedder can specify whether to allow or disallow insecure connections at a domain level old gen heap size
Definition: switches.h:259
SIN Vec< N, float > floor(const Vec< N, float > &x)
Definition: SkVx.h:703
#define T
Definition: precompiler.cc:65
const char * onGetName() override
Definition: Sk4fBench.cpp:46
void onDraw(int loops, SkCanvas *canvas) override
Definition: Sk4fBench.cpp:49
bool isSuitableFor(Backend backend) override
Definition: Sk4fBench.cpp:47
const char * onGetName() override
Definition: Sk4fBench.cpp:60
void onDraw(int loops, SkCanvas *) override
Definition: Sk4fBench.cpp:64
bool isSuitableFor(Backend backend) override
Definition: Sk4fBench.cpp:61
const char * onGetName() override
Definition: Sk4fBench.cpp:19
void onDraw(int loops, SkCanvas *canvas) override
Definition: Sk4fBench.cpp:31
bool isSuitableFor(Backend backend) override
Definition: Sk4fBench.cpp:29
Definition: SkVx.h:83
SKVX_ALWAYS_INLINE void store(void *ptr) const
Definition: SkVx.h:112