Add computepipe example implementation
Fix: 148017613
Change-Id: I0b579cd5ce45deff0e723634fdf4a09513715e83
diff --git a/computepipe/example/Runner.cpp b/computepipe/example/Runner.cpp
new file mode 100644
index 0000000..b46345e
--- /dev/null
+++ b/computepipe/example/Runner.cpp
@@ -0,0 +1,75 @@
+// Copyright 2020 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+#include <android-base/logging.h>
+#include <android/binder_process.h>
+#include <utils/Errors.h>
+#include <utils/Log.h>
+
+#include <iostream>
+#include <memory>
+#include <thread>
+
+#include "ClientConfig.pb.h"
+#include "ClientInterface.h"
+#include "MemHandle.h"
+#include "Options.pb.h"
+#include "PrebuiltGraph.h"
+#include "RunnerEngine.h"
+#include "types/Status.h"
+
+using android::automotive::computepipe::Status;
+using android::automotive::computepipe::graph::PrebuiltGraph;
+using android::automotive::computepipe::proto::ClientConfig;
+using android::automotive::computepipe::proto::Options;
+using android::automotive::computepipe::runner::client_interface::ClientInterface;
+using android::automotive::computepipe::runner::client_interface::ClientInterfaceFactory;
+using android::automotive::computepipe::runner::engine::RunnerEngine;
+using android::automotive::computepipe::runner::engine::RunnerEngineFactory;
+
+namespace {
+RunnerEngineFactory sEngineFactory;
+ClientInterfaceFactory sClientFactory;
+} // namespace
+void terminate(bool isError, std::string msg) {
+ if (isError) {
+ LOG(ERROR) << "Error msg " << msg;
+ exit(2);
+ }
+ LOG(ERROR) << "Test complete";
+ exit(0);
+}
+
+int main(int /* argc */, char** /* argv */) {
+ std::shared_ptr<RunnerEngine> engine =
+ sEngineFactory.createRunnerEngine(RunnerEngineFactory::kDefault, "");
+
+ std::unique_ptr<PrebuiltGraph> graph;
+ graph.reset(PrebuiltGraph::GetPrebuiltGraphFromLibrary("libfacegraph.so", engine));
+
+ Options options = graph->GetSupportedGraphConfigs();
+ engine->setPrebuiltGraph(std::move(graph));
+
+ std::function<void(bool, std::string)> cb = terminate;
+ std::unique_ptr<ClientInterface> client =
+ sClientFactory.createClientInterface("aidl", options, engine);
+ if (!client) {
+ std::cerr << "Unable to allocate client";
+ return -1;
+ }
+ engine->setClientInterface(std::move(client));
+ ABinderProcess_startThreadPool();
+ engine->activate();
+ ABinderProcess_joinThreadPool();
+ return 0;
+}