Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
MemsetTest.cpp
Go to the documentation of this file.
1/*
2 * Copyright 2011 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 "src/core/SkMemset.h"
9#include "tests/Test.h"
10
11#include <cstddef>
12#include <cstdint>
13
14static void set_zero(void* dst, size_t bytes) {
15 char* ptr = (char*)dst;
16 for (size_t i = 0; i < bytes; ++i) {
17 ptr[i] = 0;
18 }
19}
20
21#define MAX_ALIGNMENT 64
22#define MAX_COUNT ((MAX_ALIGNMENT) * 32)
23#define PAD 32
24#define TOTAL (PAD + MAX_ALIGNMENT + MAX_COUNT + PAD)
25
26#define VALUE16 0x1234
27#define VALUE32 0x12345678
28
29static void compare16(skiatest::Reporter* r, const uint16_t base[],
30 uint16_t value, int count) {
31 for (int i = 0; i < count; ++i) {
32 if (base[i] != value) {
33 ERRORF(r, "[%d] expected %x found %x\n", i, value, base[i]);
34 return;
35 }
36 }
37}
38
39static void compare32(skiatest::Reporter* r, const uint32_t base[],
40 uint32_t value, int count) {
41 for (int i = 0; i < count; ++i) {
42 if (base[i] != value) {
43 ERRORF(r, "[%d] expected %x found %x\n", i, value, base[i]);
44 return;
45 }
46 }
47}
48
50 uint16_t buffer[TOTAL];
51
52 for (int count = 0; count < MAX_COUNT; ++count) {
53 for (int alignment = 0; alignment < MAX_ALIGNMENT; ++alignment) {
54 set_zero(buffer, sizeof(buffer));
55
56 uint16_t* base = &buffer[PAD + alignment];
58
59 compare16(reporter, buffer, 0, PAD + alignment);
61 compare16(reporter, base + count, 0, TOTAL - count - PAD - alignment);
62 }
63 }
64}
65
67 uint32_t buffer[TOTAL];
68
69 for (int count = 0; count < MAX_COUNT; ++count) {
70 for (int alignment = 0; alignment < MAX_ALIGNMENT; ++alignment) {
71 set_zero(buffer, sizeof(buffer));
72
73 uint32_t* base = &buffer[PAD + alignment];
75
76 compare32(reporter, buffer, 0, PAD + alignment);
78 compare32(reporter, base + count, 0, TOTAL - count - PAD - alignment);
79 }
80 }
81}
82
83/**
84 * Test SkOpts::memset16 and SkOpts::memset32.
85 * For performance considerations, implementations may take different paths
86 * depending on the alignment of the dst, and/or the size of the count.
87 */
reporter
int count
#define PAD
static void test_32(skiatest::Reporter *reporter)
#define MAX_ALIGNMENT
static void test_16(skiatest::Reporter *reporter)
static void compare16(skiatest::Reporter *r, const uint16_t base[], uint16_t value, int count)
#define VALUE16
static void compare32(skiatest::Reporter *r, const uint32_t base[], uint32_t value, int count)
static void set_zero(void *dst, size_t bytes)
#define MAX_COUNT
#define VALUE32
#define TOTAL
#define DEF_TEST(name, reporter)
Definition Test.h:312
#define ERRORF(r,...)
Definition Test.h:293
static const uint8_t buffer[]
uint8_t value
void(* memset16)(uint16_t[], uint16_t, int)
void(* memset32)(uint32_t[], uint32_t, int)