forked from WebKit/WebKit
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathstream-buffer-read-write.html
74 lines (63 loc) · 2.37 KB
/
stream-buffer-read-write.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
<!DOCTYPE html><!-- webkit-test-runner [ IPCTestingAPIEnabled=true ] -->
<script>
function arraysAreEqual(a, b) {
if (a.byteLength !== b.byteLength) return false;
return a.every((val, i) => val === b[i]);
}
if (window.testRunner)
testRunner.dumpAsText()
if (window.IPC) {
let headerReadSuccess = false;
let headerWriteSuccess = false;
let dataReadSuccess = false;
let dataWriteSuccess = false;
const testBytes = Uint8Array.from({length: 16}, (x, i) => i + 0x41);
const bufferSize = 48;
const streamConnection = IPC.createStreamClientConnection('GPU', bufferSize);
let streamBuffer = streamConnection.streamBuffer();
let initialData = new Uint8Array(streamBuffer.readHeaderBytes(0, 32));
streamBuffer.writeHeaderBytes(testBytes, 0, 4);
streamBuffer.writeHeaderBytes(testBytes.slice(4,8), 4, 4);
let readResult = new Uint8Array(streamBuffer.readHeaderBytes(0, 32));
let expected = initialData.slice();
for(let i=0; i<8; i++){
expected[i] = testBytes[i];
}
if(arraysAreEqual(readResult, expected)){
headerWriteSuccess = true;
readResult = new Uint8Array(streamBuffer.readHeaderBytes(4, 28));
if(arraysAreEqual(readResult, expected.slice(4, 32))){
headerReadSuccess = true;
} else {
document.write("FAIL: Header offset read");
}
} else {
document.write("FAIL: Header write");
}
if(headerWriteSuccess && headerReadSuccess){
streamBuffer.writeDataBytes(testBytes.slice(0,8), 0, 8);
streamBuffer.writeDataBytes(testBytes.slice(8,16), 8, 8);
readResult = new Uint8Array(streamBuffer.readDataBytes(0));
if(arraysAreEqual(readResult, testBytes)){
dataWriteSuccess = true;
readResult = new Uint8Array(streamBuffer.readDataBytes(3));
if(arraysAreEqual(readResult, testBytes.slice(3))){
dataReadSuccess = true;
} else {
document.write("FAIL: Data offset read");
}
} else {
document.write("FAIL: Data write");
}
if(dataWriteSuccess && dataReadSuccess){
document.write("PASS");
}
}
} else {
// IPC not enabled so this test passes by default.
document.write("PASS");
}
</script>
<p>Test passes if it does not crash and has no 'FAIL' output</p>
</body>
</html>