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