183e24dc4706a5b7089881a55daf05b3924fab3b7David Gross/*
283e24dc4706a5b7089881a55daf05b3924fab3b7David Gross * Copyright (C) 2017 The Android Open Source Project
383e24dc4706a5b7089881a55daf05b3924fab3b7David Gross *
483e24dc4706a5b7089881a55daf05b3924fab3b7David Gross * Licensed under the Apache License, Version 2.0 (the "License");
583e24dc4706a5b7089881a55daf05b3924fab3b7David Gross * you may not use this file except in compliance with the License.
683e24dc4706a5b7089881a55daf05b3924fab3b7David Gross * You may obtain a copy of the License at
783e24dc4706a5b7089881a55daf05b3924fab3b7David Gross *
883e24dc4706a5b7089881a55daf05b3924fab3b7David Gross *      http://www.apache.org/licenses/LICENSE-2.0
983e24dc4706a5b7089881a55daf05b3924fab3b7David Gross *
1083e24dc4706a5b7089881a55daf05b3924fab3b7David Gross * Unless required by applicable law or agreed to in writing, software
1183e24dc4706a5b7089881a55daf05b3924fab3b7David Gross * distributed under the License is distributed on an "AS IS" BASIS,
1283e24dc4706a5b7089881a55daf05b3924fab3b7David Gross * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1383e24dc4706a5b7089881a55daf05b3924fab3b7David Gross * See the License for the specific language governing permissions and
1483e24dc4706a5b7089881a55daf05b3924fab3b7David Gross * limitations under the License.
1583e24dc4706a5b7089881a55daf05b3924fab3b7David Gross */
1683e24dc4706a5b7089881a55daf05b3924fab3b7David Gross
1783e24dc4706a5b7089881a55daf05b3924fab3b7David Gross#ifndef ANDROID_ML_NN_RUNTIME_COMPILATION_BUILDER_H
1883e24dc4706a5b7089881a55daf05b3924fab3b7David Gross#define ANDROID_ML_NN_RUNTIME_COMPILATION_BUILDER_H
1983e24dc4706a5b7089881a55daf05b3924fab3b7David Gross
201f4381539b7e89c42336ee7cd1addb9a4c317b34David Gross#include "ExecutionPlan.h"
2183e24dc4706a5b7089881a55daf05b3924fab3b7David Gross#include "NeuralNetworks.h"
2283e24dc4706a5b7089881a55daf05b3924fab3b7David Gross
2383e24dc4706a5b7089881a55daf05b3924fab3b7David Grossnamespace android {
2483e24dc4706a5b7089881a55daf05b3924fab3b7David Grossnamespace nn {
2583e24dc4706a5b7089881a55daf05b3924fab3b7David Gross
263ced3cfd5b8f22b632c35f24e585c4847383b195David Grossclass ExecutionBuilder;
2783e24dc4706a5b7089881a55daf05b3924fab3b7David Grossclass ModelBuilder;
2883e24dc4706a5b7089881a55daf05b3924fab3b7David Gross
2983e24dc4706a5b7089881a55daf05b3924fab3b7David Grossclass CompilationBuilder {
3083e24dc4706a5b7089881a55daf05b3924fab3b7David Grosspublic:
313ced3cfd5b8f22b632c35f24e585c4847383b195David Gross    friend class ExecutionBuilder;  // TODO remove this
3283e24dc4706a5b7089881a55daf05b3924fab3b7David Gross
3383e24dc4706a5b7089881a55daf05b3924fab3b7David Gross    CompilationBuilder(const ModelBuilder* model);
3483e24dc4706a5b7089881a55daf05b3924fab3b7David Gross
3565aa556323f4a054f80a75b6c4c721b2a7ed3298David Gross    int setPreference(int32_t preference);
3683e24dc4706a5b7089881a55daf05b3924fab3b7David Gross
3765aa556323f4a054f80a75b6c4c721b2a7ed3298David Gross    int finish();
3883e24dc4706a5b7089881a55daf05b3924fab3b7David Gross
393ced3cfd5b8f22b632c35f24e585c4847383b195David Gross    int createExecution(ExecutionBuilder** execution);
4083e24dc4706a5b7089881a55daf05b3924fab3b7David Gross
4183e24dc4706a5b7089881a55daf05b3924fab3b7David Grossprivate:
4283e24dc4706a5b7089881a55daf05b3924fab3b7David Gross    const ModelBuilder* mModel;
4365aa556323f4a054f80a75b6c4c721b2a7ed3298David Gross
441f4381539b7e89c42336ee7cd1addb9a4c317b34David Gross    ExecutionPlan mPlan;
451f4381539b7e89c42336ee7cd1addb9a4c317b34David Gross
463ced3cfd5b8f22b632c35f24e585c4847383b195David Gross    // Whether the application prefers to go fast or use low power for this execution.
4766d56404cdfab9ab8aa79d4bda83be3832a3aff9Miao Wang    int32_t mPreference = ANEURALNETWORKS_PREFER_FAST_SINGLE_ANSWER;
4865aa556323f4a054f80a75b6c4c721b2a7ed3298David Gross
4965aa556323f4a054f80a75b6c4c721b2a7ed3298David Gross    // Once the compilation has been finished, we should not allow further
5065aa556323f4a054f80a75b6c4c721b2a7ed3298David Gross    // modifications to the compilation.
5165aa556323f4a054f80a75b6c4c721b2a7ed3298David Gross    bool mFinished = false;
5283e24dc4706a5b7089881a55daf05b3924fab3b7David Gross};
5383e24dc4706a5b7089881a55daf05b3924fab3b7David Gross
5483e24dc4706a5b7089881a55daf05b3924fab3b7David Gross} // namespace nn
5583e24dc4706a5b7089881a55daf05b3924fab3b7David Gross} // namespace android
5683e24dc4706a5b7089881a55daf05b3924fab3b7David Gross
5783e24dc4706a5b7089881a55daf05b3924fab3b7David Gross#endif // ANDROID_ML_NN_RUNTIME_COMPILATION_BUILDER_H
58