6161 sudo apt-get update
6262 sudo apt-get install -y ccache ninja-build
6363 elif [ "${{ runner.os }}" = "macOS" ]; then
64- brew install ccache ninja
64+ # Check if already installed to save time
65+ brew list ccache &>/dev/null || brew install ccache
66+ brew list ninja &>/dev/null || brew install ninja
6567 fi
6668
6769 - name : Setup Java for Android
@@ -78,53 +80,42 @@ jobs:
7880 if : runner.os == 'macOS'
7981 run : bash tests/e2e/scripts/setup_hypervisor_macos.sh
8082
81- - name : Cache OVMobileBench cache directory
83+ - name : Cache Android SDK
8284 uses : actions/cache@v4
83- id : android-cache
85+ id : android-sdk- cache
8486 with :
85- path : ~/ovmb_cache
86- key : ovmb-cache -${{ runner.os }}-${{ matrix.android-api }}-${{ matrix.arch }}-v3 ${{
87+ path : ~/ovmb_cache/android-sdk
88+ key : android-sdk -${{ runner.os }}-${{ matrix.android-api }}-${{ matrix.arch }}-v1 ${{
8789 github.event.inputs.clear_cache == 'true' && '-nocache' || '' }}
8890 restore-keys : |
89- ovmb-cache-${{ runner.os }}-${{ matrix.android-api }}-
90- ovmb-cache-${{ runner.os }}-
91+ android-sdk-${{ runner.os }}-${{ matrix.android-api }}-${{ matrix.arch }}-
92+ android-sdk-${{ runner.os }}-${{ matrix.android-api }}-
93+ android-sdk-${{ runner.os }}-
94+
95+ - name : Cache Models
96+ uses : actions/cache@v4
97+ id : models-cache
98+ with :
99+ path : ~/ovmb_cache/models
100+ key : models-${{ runner.os }}-${{ hashFiles('tests/e2e/test_model_helper.py') }}-v1
101+ restore-keys : |
102+ models-${{ runner.os }}-
103+ models-
91104
92105 - name : Setup Android SDK/NDK via OVMobileBench
93106 run : |
94107 # Check if cache was forced to be cleared
95108 if [ "${{ github.event.inputs.clear_cache }}" = "true" ]; then
96109 echo "🧹 Cache clearing was requested - installing from scratch"
97- rm -rf $HOME/ovmb_cache ~/.android 2>/dev/null || true
110+ rm -rf $HOME/ovmb_cache/android-sdk 2>/dev/null || true
111+ rm -rf $HOME/ovmb_cache/models 2>/dev/null || true
98112 fi
99113
100- # Setup Android SDK/NDK - OVMobileBench will use config to determine paths
101- echo "🔧 Setting up Android SDK/NDK via OVMobileBench..."
102- # OVMobileBench will read the config and use cache_dir/android-sdk automatically
103- if [ "${{ steps.android-cache.outputs.cache-hit }}" != 'true' ] || \
104- [ ! -d "$HOME/ovmb_cache/android-sdk" ]; then
105- echo "📦 Cache miss or incomplete - Installing from scratch..."
106- echo "This will take 5-10 minutes to download and install all components"
107- # Full installation - config will determine SDK location
108- python -m ovmobilebench.cli setup-android \
109- --api ${{ matrix.android-api }} \
110- --create-avd \
111- --verbose
112- else
113- echo "⚡ Cache hit - Verifying existing installation via OVMobileBench..."
114- # First try verification only
115- if python -m ovmobilebench.cli setup-android \
116- --api ${{ matrix.android-api }} \
117- --verify-only \
118- --verbose; then
119- echo "✅ Verification passed - using cached installation"
120- else
121- echo "⚠️ Verification failed - reinstalling missing components..."
122- python -m ovmobilebench.cli setup-android \
123- --api ${{ matrix.android-api }} \
124- --create-avd \
125- --verbose
126- fi
127- fi
114+ python -m ovmobilebench.cli setup-android \
115+ -c experiments/android_example.yaml \
116+ --api ${{ matrix.android-api }} \
117+ --create-avd \
118+ --verbose
128119
129120 # Display cache stats
130121 echo "📊 Android SDK setup complete:"
@@ -133,34 +124,21 @@ jobs:
133124 # === PREPARE EMULATOR ===
134125 - name : Start Android Emulator
135126 run : |
136- python tests/e2e/test_emulator_helper.py start-emulator &
137- python tests/e2e/test_emulator_helper.py wait-for-boot
127+ python tests/e2e/test_emulator_helper.py -c experiments/android_example.yaml start-emulator &
128+ python tests/e2e/test_emulator_helper.py -c experiments/android_example.yaml wait-for-boot
138129
139- # === CACHE SETUP ===
140- - name : Cache ccache
141- uses : actions/cache@v4
130+ - name : Setup ccache
131+ uses :
hendrikmuhs/[email protected] 142132 with :
143- path : ~/.ccache
144- key : ccache-${{ runner.os }}-${{ matrix.arch }}-${{ hashFiles('tests/e2e/configs/android_resnet50.yaml') }}
145- restore-keys : |
146- ccache-${{ runner.os }}-${{ matrix.arch }}-
147- ccache-${{ runner.os }}-
148-
149- - name : Configure ccache
150- run : |
151- echo "Configuring ccache for cross-compilation..."
152- ccache --max-size=2G
153- ccache --set-config=compiler_check=content
154- ccache --set-config=sloppiness=include_file_ctime,include_file_mtime,time_macros
155- ccache --set-config=hash_dir=false
156- ccache --zero-stats
157- ccache --show-config
133+ key : ${{ runner.os }}-${{ matrix.arch }}-android
134+ create-symlink : true
135+ max-size : 2G
158136
159137 # Models are already in ovmb_cache, no separate cache needed
160138
161139 # === PREPARE MODEL ===
162140 - name : Download ResNet-50 model
163- run : python tests/e2e/test_model_helper.py download-resnet50
141+ run : python tests/e2e/test_model_helper.py -c experiments/android_example.yaml download-resnet50
164142
165143 # === OVMOBILEBENCH PIPELINE ===
166144 - name : List available devices
@@ -169,43 +147,44 @@ jobs:
169147 - name : Build OpenVINO for Android
170148 run : |
171149 python -m ovmobilebench.cli build \
172- -c tests/e2e/configs/android_resnet50 .yaml \
150+ -c experiments/android_example .yaml \
173151 --verbose
174152
175- # Show ccache statistics
153+ - name : Show ccache statistics
154+ run : |
176155 echo "📊 ccache statistics:"
177156 ccache --show-stats
178157
179158 - name : Package OpenVINO runtime and model
180159 run : |
181160 python -m ovmobilebench.cli package \
182- -c tests/e2e/configs/android_resnet50 .yaml \
161+ -c experiments/android_example .yaml \
183162 --verbose
184163
185164 - name : Deploy to Android device
186165 run : |
187166 python -m ovmobilebench.cli deploy \
188- -c tests/e2e/configs/android_resnet50 .yaml \
167+ -c experiments/android_example .yaml \
189168 --verbose
190169
191170 - name : Run benchmark on device
192171 run : |
193172 python -m ovmobilebench.cli run \
194- -c tests/e2e/configs/android_resnet50 .yaml \
173+ -c experiments/android_example .yaml \
195174 --verbose
196175
197176 - name : Generate benchmark report
198177 run : |
199178 python -m ovmobilebench.cli report \
200- -c tests/e2e/configs/android_resnet50 .yaml \
179+ -c experiments/android_example .yaml \
201180 --verbose
202181
203182 # === ALTERNATIVE: Run all stages at once ===
204183 - name : Run complete pipeline (alternative)
205184 if : false # Set to true to use this instead of individual stages
206185 run : |
207186 python -m ovmobilebench.cli all \
208- -c tests/e2e/configs/android_resnet50 .yaml \
187+ -c experiments/android_example .yaml \
209188 --verbose
210189
211190 # === VALIDATION ===
@@ -218,7 +197,7 @@ jobs:
218197 # === CLEANUP ===
219198 - name : Stop emulator
220199 if : always()
221- run : python tests/e2e/test_emulator_helper.py stop-emulator
200+ run : python tests/e2e/test_emulator_helper.py -c experiments/android_example.yaml stop-emulator
222201
223202 - name : Upload artifacts
224203 if : always()
0 commit comments