Android-cuttlefish cvd tool
local_instance.h
Go to the documentation of this file.
1/*
2 * Copyright (C) 2024 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#pragma once
18
19#include <json/json.h>
20
21#include <chrono>
22#include <memory>
23#include <set>
24#include <string>
25#include <utility>
26#include <vector>
27
30#include "cuttlefish/host/commands/cvd/instances/cvd_persistent_data.pb.h"
33
34namespace cuttlefish {
35
37 public:
38 LocalInstance(const LocalInstance&) = default;
41
42 uint32_t Id() const { return instance_proto_->id(); }
43 const std::string& Name() const { return instance_proto_->name(); }
44 cvd::InstanceState State() const { return instance_proto_->state(); }
45 void SetState(cvd::InstanceState state);
46 const std::string& WebRtcDeviceId() const {
47 return instance_proto_->webrtc_device_id();
48 }
49 void SetWebRtcDeviceId(std::string webrtc_device_id) {
50 instance_proto_->set_webrtc_device_id(std::move(webrtc_device_id));
51 }
52 std::string InstanceDirectory() const;
53 int AdbPort() const;
54 const std::string& HomeDirectory() const {
55 return group_proto_->home_directory();
56 }
57 const std::string& HostArtifactsPath() const {
58 return group_proto_->host_artifacts_path();
59 }
60 std::string AssemblyDirectory() const;
61
62 bool IsActive() const;
63 // Contacts run_cvd to query the instance status. Returns a JSON object with
64 // a description of the instance properties. Waits for run_cvd to respond for
65 // at most timeout seconds.
67 std::chrono::seconds timeout = std::chrono::seconds(5));
68
71 Result<void> Restart(std::chrono::seconds launcher_timeout,
72 std::chrono::seconds boot_timeout);
73 Result<void> PowerWash(std::chrono::seconds launcher_timeout,
74 std::chrono::seconds boot_timeout);
76 Result<void> StartRecording(std::chrono::seconds launcher_timeout);
77 Result<void> StopRecording(std::chrono::seconds launcher_timeout);
78
79 // Return list of filenames of instance-level log files.
81 // List names of the instance's input devices.
84 const std::string& device_name) const;
86 const std::string& device_name) const;
87
88 private:
89 LocalInstance(std::shared_ptr<cvd::InstanceGroup> group_proto,
90 cvd::Instance* instance_proto);
91
92 std::string config_file_path() const;
93 Result<SharedFD> GetLauncherMonitor(std::chrono::seconds timeout) const;
98
99 // Sharing ownership of the group proto ensures the instance proto reference
100 // doesn't invalidate.
101 std::shared_ptr<cvd::InstanceGroup> group_proto_;
102 cvd::Instance* instance_proto_;
103 // This may be null, access through LoadConfig() instead.
104 std::shared_ptr<const CuttlefishConfig> UNSAFE_config_;
105 friend class LocalInstanceGroup;
106};
107
108} // namespace cuttlefish
Definition: local_instance_group.h:32
Definition: local_instance.h:36
Result< Json::Value > ReadJsonConfig() const
Definition: local_instance.cpp:236
Result< Fd > NewCaptureInputDeviceEventsConn(const std::string &device_name) const
Definition: local_instance.cpp:331
void SetState(cvd::InstanceState state)
Definition: local_instance.cpp:66
Result< const CuttlefishConfig * > LoadConfig()
Definition: local_instance.cpp:248
const std::string & HostArtifactsPath() const
Definition: local_instance.h:57
cvd::Instance * instance_proto_
Definition: local_instance.h:102
int AdbPort() const
Definition: local_instance.cpp:81
Result< std::vector< std::string > > LogsFilenames() const
Definition: local_instance.cpp:296
Result< void > PowerWash(std::chrono::seconds launcher_timeout, std::chrono::seconds boot_timeout)
Definition: local_instance.cpp:180
std::string AssemblyDirectory() const
Definition: local_instance.cpp:93
Result< void > Restart(std::chrono::seconds launcher_timeout, std::chrono::seconds boot_timeout)
Definition: local_instance.cpp:160
Result< void > PressPowerBtn()
Definition: local_instance.cpp:122
Result< std::set< std::string > > InputDevices() const
Definition: local_instance.cpp:316
bool IsActive() const
Definition: local_instance.cpp:97
uint32_t Id() const
Definition: local_instance.h:42
std::shared_ptr< cvd::InstanceGroup > group_proto_
Definition: local_instance.h:101
LocalInstance(const LocalInstance &)=default
Result< std::string > UDSDirectory() const
Definition: local_instance.cpp:262
const std::string & Name() const
Definition: local_instance.h:43
LocalInstance & operator=(const LocalInstance &)=default
Result< void > PressPowerBtnLegacy()
Definition: local_instance.cpp:144
std::shared_ptr< const CuttlefishConfig > UNSAFE_config_
Definition: local_instance.h:104
LocalInstance(LocalInstance &&)=default
Result< void > StartRecording(std::chrono::seconds launcher_timeout)
Definition: local_instance.cpp:210
Result< void > StopRecording(std::chrono::seconds launcher_timeout)
Definition: local_instance.cpp:221
std::string config_file_path() const
Definition: local_instance.cpp:232
Result< SharedFD > GetLauncherMonitor(std::chrono::seconds timeout) const
Definition: local_instance.cpp:275
Result< Fd > NewInjectInputDeviceEventsConn(const std::string &device_name) const
Definition: local_instance.cpp:345
Result< std::vector< std::string > > ListRecordings()
Definition: local_instance.cpp:201
Result< const CuttlefishConfig::InstanceSpecific > GetInstanceConfig()
Definition: local_instance.cpp:257
cvd::InstanceState State() const
Definition: local_instance.h:44
std::string InstanceDirectory() const
Definition: local_instance.cpp:70
const std::string & WebRtcDeviceId() const
Definition: local_instance.h:46
Result< Json::Value > FetchStatus(std::chrono::seconds timeout=std::chrono::seconds(5))
Definition: local_instance.cpp:118
void SetWebRtcDeviceId(std::string webrtc_device_id)
Definition: local_instance.h:49
const std::string & HomeDirectory() const
Definition: local_instance.h:54
Definition: alloc_driver.h:20
tl::expected< T, StackTraceError > Result
Definition: result_type.h:30