Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
testing
scenario_app
android
app
src
androidTest
java
dev
flutter
scenariosui
ScreenshotUtil.java
Go to the documentation of this file.
1
// Copyright 2013 The Flutter Authors. All rights reserved.
2
// Use of this source code is governed by a BSD-style license that can be
3
// found in the LICENSE file.
4
5
package
dev.flutter.scenariosui;
6
7
import
androidx.annotation.NonNull;
8
import
dev.flutter.scenarios.TestableFlutterActivity;
9
import
java.io.IOException;
10
import
java.io.InputStream;
11
import
java.io.OutputStream;
12
import
java.net.Socket;
13
import
java.nio.ByteBuffer;
14
import
java.util.concurrent.CountDownLatch;
15
import
java.util.concurrent.Executor;
16
import
java.util.concurrent.Executors;
17
18
/**
19
* Allows to capture screenshots, and transfers the screenshots to the host where they can be
20
* further proccessed. On a LUCI environment, the screenshots are sent to Skia Gold.
21
*/
22
public
class
ScreenshotUtil
{
23
private
static
final
String HOST =
"localhost"
;
24
private
static
final
int
PORT = 3000;
25
26
private
static
Connection conn;
27
private
static
Executor executor;
28
29
private
static
class
Connection {
30
final
Socket clientSocket;
31
final
OutputStream out;
32
final
InputStream in;
33
34
Connection(Socket socket)
throws
IOException {
35
clientSocket = socket;
36
out = socket.getOutputStream();
37
in = socket.getInputStream();
38
}
39
40
synchronized
void
writeFile(String
name
)
throws
IOException {
41
final
ByteBuffer
buffer
= ByteBuffer.allocate(
name
.length() + 12);
42
// See ScreenshotBlobTransformer#bind in screenshot_transformer.dart for consumer side.
43
buffer
.putInt(
name
.length());
44
buffer
.putInt(0);
45
buffer
.putInt(0);
46
buffer
.put(
name
.getBytes());
47
final
byte
[] bytes =
buffer
.array();
48
out.write(bytes, 0, bytes.length);
49
out.flush();
50
51
// Wait on run_android_tests.dart to write a single byte into the socket
52
// as a signal that adb screencapture has completed.
53
in.read();
54
}
55
56
synchronized
void
close()
throws
IOException {
57
clientSocket.close();
58
}
59
}
60
61
/** Starts the connection with the host. */
62
public
static
synchronized
void
onCreate
() {
63
if
(executor ==
null
) {
64
executor = Executors.newSingleThreadExecutor();
65
}
66
if
(conn ==
null
) {
67
executor.execute(
68
() -> {
69
try
{
70
final
Socket socket =
new
Socket(HOST, PORT);
71
conn =
new
Connection(socket);
72
}
catch
(IOException e) {
73
throw
new
RuntimeException(e);
74
}
75
});
76
}
77
}
78
79
/** Closes the connection with the host. */
80
public
static
synchronized
void
finish
() {
81
if
(executor !=
null
&& conn !=
null
) {
82
executor.execute(
83
() -> {
84
try
{
85
conn.close();
86
conn =
null
;
87
}
catch
(IOException e) {
88
throw
new
RuntimeException(e);
89
}
90
});
91
}
92
}
93
94
/**
95
* Sends the file to the host.
96
*
97
* @param filename The file name.
98
* @param fileContent The file content.
99
*/
100
public
static
synchronized
void
writeFile
(
101
@NonNull String filename, @NonNull CountDownLatch latch) {
102
if
(executor !=
null
&& conn !=
null
) {
103
executor.execute(
104
() -> {
105
try
{
106
conn.writeFile(filename);
107
}
catch
(IOException e) {
108
throw
new
RuntimeException(e);
109
}
finally
{
110
latch.countDown();
111
}
112
});
113
}
114
}
115
116
/**
117
* Captures a screenshot of the activity, and sends the screenshot bytes to the host where it is
118
* further processed.
119
*
120
* <p>The activity must be already launched.
121
*
122
* @param activity The target activity.
123
* @param fileName The name of the file.
124
*/
125
public
static
void
capture
(@NonNull TestableFlutterActivity activity, @NonNull String captureName)
126
throws
Exception {
127
CountDownLatch latch =
new
CountDownLatch(1);
128
activity.waitUntilFlutterRendered();
129
ScreenshotUtil
.
writeFile
(captureName, latch);
130
latch.await();
131
}
132
}
dev.flutter.scenariosui.ScreenshotUtil
Definition
ScreenshotUtil.java:22
dev.flutter.scenariosui.ScreenshotUtil.finish
static synchronized void finish()
Definition
ScreenshotUtil.java:80
dev.flutter.scenariosui.ScreenshotUtil.onCreate
static synchronized void onCreate()
Definition
ScreenshotUtil.java:62
dev.flutter.scenariosui.ScreenshotUtil.capture
static void capture(@NonNull TestableFlutterActivity activity, @NonNull String captureName)
Definition
ScreenshotUtil.java:125
dev.flutter.scenariosui.ScreenshotUtil.writeFile
static synchronized void writeFile( @NonNull String filename, @NonNull CountDownLatch latch)
Definition
ScreenshotUtil.java:100
buffer
static const uint8_t buffer[]
Definition
fl_pixel_buffer_texture_test.cc:44
name
const char * name
Definition
fuchsia.cc:50
Generated on Fri Apr 26 2024 06:14:35 for Flutter Engine by
1.9.8