xref: /aosp_15_r20/system/extras/simpleperf/runtest/function_fork.cpp (revision 288bf5226967eb3dac5cce6c939ccc2a7f2b4fe5)
1*288bf522SAndroid Build Coastguard Worker #include <stdlib.h>
2*288bf522SAndroid Build Coastguard Worker #include <sys/wait.h>
3*288bf522SAndroid Build Coastguard Worker #include <unistd.h>
4*288bf522SAndroid Build Coastguard Worker 
5*288bf522SAndroid Build Coastguard Worker constexpr int LOOP_COUNT = 100000000;
6*288bf522SAndroid Build Coastguard Worker 
7*288bf522SAndroid Build Coastguard Worker volatile int a[2];
ParentFunction()8*288bf522SAndroid Build Coastguard Worker void ParentFunction() {
9*288bf522SAndroid Build Coastguard Worker   volatile int* p = a + atoi("0");
10*288bf522SAndroid Build Coastguard Worker   for (int i = 0; i < LOOP_COUNT; ++i) {
11*288bf522SAndroid Build Coastguard Worker     *p = i;
12*288bf522SAndroid Build Coastguard Worker   }
13*288bf522SAndroid Build Coastguard Worker }
14*288bf522SAndroid Build Coastguard Worker 
ChildFunction()15*288bf522SAndroid Build Coastguard Worker void ChildFunction() {
16*288bf522SAndroid Build Coastguard Worker   volatile int* p = a + atoi("1");
17*288bf522SAndroid Build Coastguard Worker   for (int i = 0; i < LOOP_COUNT; ++i) {
18*288bf522SAndroid Build Coastguard Worker     *p = i;
19*288bf522SAndroid Build Coastguard Worker   }
20*288bf522SAndroid Build Coastguard Worker }
21*288bf522SAndroid Build Coastguard Worker 
main()22*288bf522SAndroid Build Coastguard Worker int main() {
23*288bf522SAndroid Build Coastguard Worker   while (true) {
24*288bf522SAndroid Build Coastguard Worker     pid_t pid = fork();
25*288bf522SAndroid Build Coastguard Worker     if (pid == 0) {
26*288bf522SAndroid Build Coastguard Worker       ChildFunction();
27*288bf522SAndroid Build Coastguard Worker       return 0;
28*288bf522SAndroid Build Coastguard Worker     } else {
29*288bf522SAndroid Build Coastguard Worker       ParentFunction();
30*288bf522SAndroid Build Coastguard Worker       waitpid(pid, nullptr, 0);
31*288bf522SAndroid Build Coastguard Worker     }
32*288bf522SAndroid Build Coastguard Worker   }
33*288bf522SAndroid Build Coastguard Worker   return 0;
34*288bf522SAndroid Build Coastguard Worker }
35