xref: /aosp_15_r20/development/tools/winscope/protos/build.js (revision 90c8c64db3049935a07c6143d7fd006e26f8ecca)
1*90c8c64dSAndroid Build Coastguard Worker/*
2*90c8c64dSAndroid Build Coastguard Worker * Copyright (C) 2023 The Android Open Source Project
3*90c8c64dSAndroid Build Coastguard Worker *
4*90c8c64dSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
5*90c8c64dSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
6*90c8c64dSAndroid Build Coastguard Worker * You may obtain a copy of the License at
7*90c8c64dSAndroid Build Coastguard Worker *
8*90c8c64dSAndroid Build Coastguard Worker *      http://www.apache.org/licenses/LICENSE-2.0
9*90c8c64dSAndroid Build Coastguard Worker *
10*90c8c64dSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
11*90c8c64dSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
12*90c8c64dSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*90c8c64dSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
14*90c8c64dSAndroid Build Coastguard Worker * limitations under the License.
15*90c8c64dSAndroid Build Coastguard Worker */
16*90c8c64dSAndroid Build Coastguard Workerconst {exec} = require('child_process');
17*90c8c64dSAndroid Build Coastguard Worker
18*90c8c64dSAndroid Build Coastguard Workerconst ANDROID_BUILD_TOP = __dirname + '/../../../../';
19*90c8c64dSAndroid Build Coastguard Workerconst WINSCOPE_TOP = __dirname + '/..';
20*90c8c64dSAndroid Build Coastguard Workerconst PERFETTO_TOP = ANDROID_BUILD_TOP + '/external/perfetto';
21*90c8c64dSAndroid Build Coastguard Workerconst OUT_TOP = __dirname + '/../deps_build/protos';
22*90c8c64dSAndroid Build Coastguard Worker
23*90c8c64dSAndroid Build Coastguard Workerbuild();
24*90c8c64dSAndroid Build Coastguard Worker
25*90c8c64dSAndroid Build Coastguard Workerasync function build() {
26*90c8c64dSAndroid Build Coastguard Worker    await runCommand(`rm -rf ${OUT_TOP}`);
27*90c8c64dSAndroid Build Coastguard Worker
28*90c8c64dSAndroid Build Coastguard Worker    const promises = [
29*90c8c64dSAndroid Build Coastguard Worker        // IME
30*90c8c64dSAndroid Build Coastguard Worker        buildProtos([
31*90c8c64dSAndroid Build Coastguard Worker            '../../../../frameworks/base/core/proto/android/view/inputmethod/inputmethodeditortrace.proto'
32*90c8c64dSAndroid Build Coastguard Worker        ], 'ime/udc'),
33*90c8c64dSAndroid Build Coastguard Worker        buildProtos([
34*90c8c64dSAndroid Build Coastguard Worker            'ime/latest/wrapper.proto',
35*90c8c64dSAndroid Build Coastguard Worker        ], 'ime/latest'),
36*90c8c64dSAndroid Build Coastguard Worker
37*90c8c64dSAndroid Build Coastguard Worker        // ProtoLog
38*90c8c64dSAndroid Build Coastguard Worker        buildProtos([
39*90c8c64dSAndroid Build Coastguard Worker            'protolog/udc/protolog.proto'
40*90c8c64dSAndroid Build Coastguard Worker        ], 'protolog/udc'),
41*90c8c64dSAndroid Build Coastguard Worker        buildProtos([
42*90c8c64dSAndroid Build Coastguard Worker            '../../../../external/perfetto/protos/perfetto/trace/android/protolog.proto'
43*90c8c64dSAndroid Build Coastguard Worker        ], 'protolog/latest'),
44*90c8c64dSAndroid Build Coastguard Worker
45*90c8c64dSAndroid Build Coastguard Worker        // SurfaceFlinger
46*90c8c64dSAndroid Build Coastguard Worker        buildProtos([
47*90c8c64dSAndroid Build Coastguard Worker            'surfaceflinger/udc/layerstrace.proto',
48*90c8c64dSAndroid Build Coastguard Worker        ], 'surfaceflinger/udc'),
49*90c8c64dSAndroid Build Coastguard Worker        buildProtos([
50*90c8c64dSAndroid Build Coastguard Worker            '../../../../external/perfetto/protos/perfetto/trace/android/surfaceflinger_layers.proto',
51*90c8c64dSAndroid Build Coastguard Worker        ], 'surfaceflinger/latest'),
52*90c8c64dSAndroid Build Coastguard Worker
53*90c8c64dSAndroid Build Coastguard Worker        // Transactions
54*90c8c64dSAndroid Build Coastguard Worker        buildProtos([
55*90c8c64dSAndroid Build Coastguard Worker            'surfaceflinger/udc/transactions.proto',
56*90c8c64dSAndroid Build Coastguard Worker        ], 'transactions/udc'),
57*90c8c64dSAndroid Build Coastguard Worker        buildProtos([
58*90c8c64dSAndroid Build Coastguard Worker            '../../../../external/perfetto/protos/perfetto/trace/android/surfaceflinger_transactions.proto',
59*90c8c64dSAndroid Build Coastguard Worker        ], 'transactions/latest'),
60*90c8c64dSAndroid Build Coastguard Worker
61*90c8c64dSAndroid Build Coastguard Worker        // Transitions
62*90c8c64dSAndroid Build Coastguard Worker        buildProtos([
63*90c8c64dSAndroid Build Coastguard Worker            'transitions/udc/windowmanagertransitiontrace.proto',
64*90c8c64dSAndroid Build Coastguard Worker            'transitions/udc/wm_shell_transition_trace.proto'
65*90c8c64dSAndroid Build Coastguard Worker        ], 'transitions/udc'),
66*90c8c64dSAndroid Build Coastguard Worker        buildProtos([
67*90c8c64dSAndroid Build Coastguard Worker            '../../../../external/perfetto/protos/perfetto/trace/android/shell_transition.proto',
68*90c8c64dSAndroid Build Coastguard Worker        ], 'transitions/latest'),
69*90c8c64dSAndroid Build Coastguard Worker
70*90c8c64dSAndroid Build Coastguard Worker        // ViewCapture
71*90c8c64dSAndroid Build Coastguard Worker        buildProtos([
72*90c8c64dSAndroid Build Coastguard Worker            '../../../../frameworks/libs/systemui/viewcapturelib/src/com/android/app/viewcapture/proto/view_capture.proto'
73*90c8c64dSAndroid Build Coastguard Worker        ], 'viewcapture/udc'),
74*90c8c64dSAndroid Build Coastguard Worker        buildProtos([
75*90c8c64dSAndroid Build Coastguard Worker            'viewcapture/latest/wrapper.proto',
76*90c8c64dSAndroid Build Coastguard Worker        ], 'viewcapture/latest'),
77*90c8c64dSAndroid Build Coastguard Worker
78*90c8c64dSAndroid Build Coastguard Worker        // WindowManager
79*90c8c64dSAndroid Build Coastguard Worker        buildProtos([
80*90c8c64dSAndroid Build Coastguard Worker            '../../../../frameworks/base/core/proto/android/server/windowmanagertrace.proto',
81*90c8c64dSAndroid Build Coastguard Worker        ], 'windowmanager/udc'),
82*90c8c64dSAndroid Build Coastguard Worker        buildProtos([
83*90c8c64dSAndroid Build Coastguard Worker            'windowmanager/latest/wrapper.proto',
84*90c8c64dSAndroid Build Coastguard Worker        ], 'windowmanager/latest'),
85*90c8c64dSAndroid Build Coastguard Worker
86*90c8c64dSAndroid Build Coastguard Worker        // Input
87*90c8c64dSAndroid Build Coastguard Worker        buildProtos([
88*90c8c64dSAndroid Build Coastguard Worker            '../../../../external/perfetto/protos/perfetto/trace/android/android_input_event.proto',
89*90c8c64dSAndroid Build Coastguard Worker            'input/latest/input_event_wrapper.proto',
90*90c8c64dSAndroid Build Coastguard Worker        ], 'input/latest'),
91*90c8c64dSAndroid Build Coastguard Worker
92*90c8c64dSAndroid Build Coastguard Worker        // Test proto fields
93*90c8c64dSAndroid Build Coastguard Worker        buildProtos([
94*90c8c64dSAndroid Build Coastguard Worker            'test/fake_proto_test.proto',
95*90c8c64dSAndroid Build Coastguard Worker        ], 'test/fake_proto'),
96*90c8c64dSAndroid Build Coastguard Worker
97*90c8c64dSAndroid Build Coastguard Worker        // Test intdef translation
98*90c8c64dSAndroid Build Coastguard Worker        buildProtos([
99*90c8c64dSAndroid Build Coastguard Worker            'test/intdef_translation_test.proto',
100*90c8c64dSAndroid Build Coastguard Worker        ], 'test/intdef_translation'),
101*90c8c64dSAndroid Build Coastguard Worker    ];
102*90c8c64dSAndroid Build Coastguard Worker
103*90c8c64dSAndroid Build Coastguard Worker    await Promise.all(promises);
104*90c8c64dSAndroid Build Coastguard Worker}
105*90c8c64dSAndroid Build Coastguard Worker
106*90c8c64dSAndroid Build Coastguard Workerasync function buildProtos(protoPaths, outSubdir) {
107*90c8c64dSAndroid Build Coastguard Worker    const outDir = OUT_TOP + '/' + outSubdir;
108*90c8c64dSAndroid Build Coastguard Worker    const protoFullPaths = protoPaths.map((path) => __dirname + '/' + path);
109*90c8c64dSAndroid Build Coastguard Worker    const rootName = outSubdir.replaceAll('/', '_');
110*90c8c64dSAndroid Build Coastguard Worker
111*90c8c64dSAndroid Build Coastguard Worker    const commandBuildJson = [
112*90c8c64dSAndroid Build Coastguard Worker        'npx',
113*90c8c64dSAndroid Build Coastguard Worker        'pbjs',
114*90c8c64dSAndroid Build Coastguard Worker        //TODO(b/318480413): for perfetto traces use '--force-bigint' as soon as available,
115*90c8c64dSAndroid Build Coastguard Worker        // i.e. when this PR is merged https://github.com/protobufjs/protobuf.js/pull/1557
116*90c8c64dSAndroid Build Coastguard Worker        '--force-long',
117*90c8c64dSAndroid Build Coastguard Worker        '--target json-module',
118*90c8c64dSAndroid Build Coastguard Worker        '--wrap es6',
119*90c8c64dSAndroid Build Coastguard Worker        `--out ${outDir}/json.js`,
120*90c8c64dSAndroid Build Coastguard Worker        `--root ${rootName}`,
121*90c8c64dSAndroid Build Coastguard Worker        `--path ${PERFETTO_TOP}`,
122*90c8c64dSAndroid Build Coastguard Worker        `--path ${WINSCOPE_TOP}`,
123*90c8c64dSAndroid Build Coastguard Worker        `--path ${ANDROID_BUILD_TOP}`,
124*90c8c64dSAndroid Build Coastguard Worker        protoFullPaths.join(' ')
125*90c8c64dSAndroid Build Coastguard Worker    ].join(' ');
126*90c8c64dSAndroid Build Coastguard Worker
127*90c8c64dSAndroid Build Coastguard Worker    const commandBuildJs = [
128*90c8c64dSAndroid Build Coastguard Worker        'npx',
129*90c8c64dSAndroid Build Coastguard Worker        'pbjs',
130*90c8c64dSAndroid Build Coastguard Worker        '--force-long',
131*90c8c64dSAndroid Build Coastguard Worker        '--target static-module',
132*90c8c64dSAndroid Build Coastguard Worker        `--root ${outSubdir.replace('/', '')}`,
133*90c8c64dSAndroid Build Coastguard Worker        `--out ${outDir}/static.js`,
134*90c8c64dSAndroid Build Coastguard Worker        `--path ${PERFETTO_TOP}`,
135*90c8c64dSAndroid Build Coastguard Worker        `--path ${WINSCOPE_TOP}`,
136*90c8c64dSAndroid Build Coastguard Worker        `--path ${ANDROID_BUILD_TOP}`,
137*90c8c64dSAndroid Build Coastguard Worker        protoFullPaths.join(' '),
138*90c8c64dSAndroid Build Coastguard Worker    ].join(' ');
139*90c8c64dSAndroid Build Coastguard Worker
140*90c8c64dSAndroid Build Coastguard Worker    const commandBuildTs = [
141*90c8c64dSAndroid Build Coastguard Worker        'npx',
142*90c8c64dSAndroid Build Coastguard Worker        'pbts',
143*90c8c64dSAndroid Build Coastguard Worker        `--out ${outDir}/static.d.ts`,
144*90c8c64dSAndroid Build Coastguard Worker        `${outDir}/static.js`
145*90c8c64dSAndroid Build Coastguard Worker    ].join(' ');
146*90c8c64dSAndroid Build Coastguard Worker
147*90c8c64dSAndroid Build Coastguard Worker    await runCommand(`mkdir -p ${outDir}`)
148*90c8c64dSAndroid Build Coastguard Worker    await runCommand(commandBuildJson);
149*90c8c64dSAndroid Build Coastguard Worker    await runCommand(commandBuildJs);
150*90c8c64dSAndroid Build Coastguard Worker    await runCommand(commandBuildTs);
151*90c8c64dSAndroid Build Coastguard Worker}
152*90c8c64dSAndroid Build Coastguard Worker
153*90c8c64dSAndroid Build Coastguard Workerfunction runCommand(command) {
154*90c8c64dSAndroid Build Coastguard Worker    return new Promise((resolve, reject) => {
155*90c8c64dSAndroid Build Coastguard Worker        exec(command, (err, stdout, stderr) => {
156*90c8c64dSAndroid Build Coastguard Worker            if (err) {
157*90c8c64dSAndroid Build Coastguard Worker                const errorMessage =
158*90c8c64dSAndroid Build Coastguard Worker                    "Failed to execute command" +
159*90c8c64dSAndroid Build Coastguard Worker                    `\n\ncommand: ${command}` +
160*90c8c64dSAndroid Build Coastguard Worker                    `\n\nstdout: ${stdout}` +
161*90c8c64dSAndroid Build Coastguard Worker                    `\n\nstderr: ${stderr}`;
162*90c8c64dSAndroid Build Coastguard Worker                reject(errorMessage);
163*90c8c64dSAndroid Build Coastguard Worker            }
164*90c8c64dSAndroid Build Coastguard Worker            resolve();
165*90c8c64dSAndroid Build Coastguard Worker        });
166*90c8c64dSAndroid Build Coastguard Worker    });
167*90c8c64dSAndroid Build Coastguard Worker}
168