Android-cuttlefish cvd tool
task.h
Go to the documentation of this file.
1//
2// Copyright (C) 2020 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#pragma once
17
18#include <string>
19
20#include "super_flash_helper.h"
21#include "util.h"
22
23struct FlashingPlan;
24struct Image;
25using ImageEntry = std::pair<const Image*, std::string>;
26
27class FlashTask;
28class RebootTask;
29class UpdateSuperTask;
31class WipeTask;
32class ResizeTask;
33class Task {
34 public:
35 Task() = default;
36 virtual void Run() = 0;
37 virtual std::string ToString() const = 0;
38
39 virtual FlashTask* AsFlashTask() { return nullptr; }
40 virtual RebootTask* AsRebootTask() { return nullptr; }
41 virtual UpdateSuperTask* AsUpdateSuperTask() { return nullptr; }
43 virtual WipeTask* AsWipeTask() { return nullptr; }
44 virtual ResizeTask* AsResizeTask() { return nullptr; }
45
46 virtual ~Task() = default;
47};
48
49class FlashTask : public Task {
50 public:
51 FlashTask(const std::string& slot, const std::string& pname, const std::string& fname,
52 const bool apply_vbmeta, const FlashingPlan* fp);
53 virtual FlashTask* AsFlashTask() override { return this; }
54
55 static bool IsDynamicPartition(const ImageSource* source, const FlashTask* task);
56 void Run() override;
57 std::string ToString() const override;
58 std::string GetPartition() const { return pname_; }
59 std::string GetImageName() const { return fname_; }
60 std::string GetSlot() const { return slot_; }
61 std::string GetPartitionAndSlot() const;
62
63 private:
64 const std::string pname_;
65 const std::string fname_;
66 const std::string slot_;
67 const bool apply_vbmeta_;
69};
70
71class RebootTask : public Task {
72 public:
73 RebootTask(const FlashingPlan* fp);
74 RebootTask(const FlashingPlan* fp, const std::string& reboot_target);
75 virtual RebootTask* AsRebootTask() override { return this; }
76 void Run() override;
77 std::string ToString() const override;
78 std::string GetTarget() const { return reboot_target_; };
79
80 private:
81 const std::string reboot_target_ = "";
83};
84
86 public:
87 OptimizedFlashSuperTask(const std::string& super_name, std::unique_ptr<SuperFlashHelper> helper,
88 SparsePtr sparse_layout, uint64_t super_size, const FlashingPlan* fp);
89 virtual OptimizedFlashSuperTask* AsOptimizedFlashSuperTask() override { return this; }
90
91 static std::unique_ptr<OptimizedFlashSuperTask> Initialize(
92 const FlashingPlan* fp, std::vector<std::unique_ptr<Task>>& tasks);
93 static bool CanOptimize(const ImageSource* source,
94 const std::vector<std::unique_ptr<Task>>& tasks);
95
96 void Run() override;
97 std::string ToString() const override;
98
99 private:
100 const std::string super_name_;
101 std::unique_ptr<SuperFlashHelper> helper_;
103 uint64_t super_size_;
105};
106
107class UpdateSuperTask : public Task {
108 public:
109 UpdateSuperTask(const FlashingPlan* fp);
110 virtual UpdateSuperTask* AsUpdateSuperTask() override { return this; }
111
112 void Run() override;
113 std::string ToString() const override;
114
115 private:
117};
118
119class ResizeTask : public Task {
120 public:
121 ResizeTask(const FlashingPlan* fp, const std::string& pname, const std::string& size,
122 const std::string& slot);
123 void Run() override;
124 std::string ToString() const override;
125 virtual ResizeTask* AsResizeTask() override { return this; }
126
127 private:
129 const std::string pname_;
130 const std::string size_;
131 const std::string slot_;
132};
133
134class DeleteTask : public Task {
135 public:
136 DeleteTask(const FlashingPlan* fp, const std::string& pname);
137 void Run() override;
138 std::string ToString() const override;
139
140 private:
142 const std::string pname_;
143};
144
145class WipeTask : public Task {
146 public:
147 WipeTask(const FlashingPlan* fp, const std::string& pname);
148 virtual WipeTask* AsWipeTask() override { return this; }
149 void Run() override;
150 std::string ToString() const override;
151
152 private:
154 const std::string pname_;
155};
Definition: task.h:134
DeleteTask(const FlashingPlan *fp, const std::string &pname)
Definition: task.cpp:287
std::string ToString() const override
Definition: task.cpp:293
void Run() override
Definition: task.cpp:289
const FlashingPlan * fp_
Definition: task.h:141
const std::string pname_
Definition: task.h:142
Definition: task.h:49
std::string GetImageName() const
Definition: task.h:59
const std::string pname_
Definition: task.h:64
std::string GetPartition() const
Definition: task.h:58
std::string GetSlot() const
Definition: task.h:60
std::string ToString() const override
Definition: task.cpp:59
FlashTask(const std::string &slot, const std::string &pname, const std::string &fname, const bool apply_vbmeta, const FlashingPlan *fp)
Definition: task.cpp:29
const std::string slot_
Definition: task.h:66
void Run() override
Definition: task.cpp:42
const std::string fname_
Definition: task.h:65
std::string GetPartitionAndSlot() const
Definition: task.cpp:67
const bool apply_vbmeta_
Definition: task.h:67
static bool IsDynamicPartition(const ImageSource *source, const FlashTask *task)
Definition: task.cpp:33
const FlashingPlan * fp_
Definition: task.h:68
virtual FlashTask * AsFlashTask() override
Definition: task.h:53
Definition: util.h:51
Definition: task.h:85
std::unique_ptr< SuperFlashHelper > helper_
Definition: task.h:101
static std::unique_ptr< OptimizedFlashSuperTask > Initialize(const FlashingPlan *fp, std::vector< std::unique_ptr< Task > > &tasks)
Definition: task.cpp:163
void Run() override
Definition: task.cpp:119
virtual OptimizedFlashSuperTask * AsOptimizedFlashSuperTask() override
Definition: task.h:89
OptimizedFlashSuperTask(const std::string &super_name, std::unique_ptr< SuperFlashHelper > helper, SparsePtr sparse_layout, uint64_t super_size, const FlashingPlan *fp)
Definition: task.cpp:109
const FlashingPlan * fp_
Definition: task.h:104
SparsePtr sparse_layout_
Definition: task.h:102
static bool CanOptimize(const ImageSource *source, const std::vector< std::unique_ptr< Task > > &tasks)
Definition: task.cpp:142
std::string ToString() const override
Definition: task.cpp:134
const std::string super_name_
Definition: task.h:100
uint64_t super_size_
Definition: task.h:103
Definition: task.h:71
std::string GetTarget() const
Definition: task.h:78
std::string ToString() const override
Definition: task.cpp:105
const FlashingPlan * fp_
Definition: task.h:82
RebootTask(const FlashingPlan *fp)
Definition: task.cpp:81
void Run() override
Definition: task.cpp:85
const std::string reboot_target_
Definition: task.h:81
virtual RebootTask * AsRebootTask() override
Definition: task.h:75
Definition: task.h:119
const std::string pname_
Definition: task.h:129
ResizeTask(const FlashingPlan *fp, const std::string &pname, const std::string &size, const std::string &slot)
Definition: task.cpp:270
const std::string size_
Definition: task.h:130
virtual ResizeTask * AsResizeTask() override
Definition: task.h:125
const std::string slot_
Definition: task.h:131
std::string ToString() const override
Definition: task.cpp:283
void Run() override
Definition: task.cpp:274
const FlashingPlan * fp_
Definition: task.h:128
Definition: task.h:33
virtual FlashTask * AsFlashTask()
Definition: task.h:39
virtual ResizeTask * AsResizeTask()
Definition: task.h:44
virtual WipeTask * AsWipeTask()
Definition: task.h:43
Task()=default
virtual ~Task()=default
virtual std::string ToString() const =0
virtual OptimizedFlashSuperTask * AsOptimizedFlashSuperTask()
Definition: task.h:42
virtual void Run()=0
virtual RebootTask * AsRebootTask()
Definition: task.h:40
virtual UpdateSuperTask * AsUpdateSuperTask()
Definition: task.h:41
Definition: task.h:107
void Run() override
Definition: task.cpp:245
virtual UpdateSuperTask * AsUpdateSuperTask() override
Definition: task.h:110
const FlashingPlan * fp_
Definition: task.h:116
UpdateSuperTask(const FlashingPlan *fp)
Definition: task.cpp:243
std::string ToString() const override
Definition: task.cpp:266
Definition: task.h:145
void Run() override
Definition: task.cpp:299
const FlashingPlan * fp_
Definition: task.h:153
std::string ToString() const override
Definition: task.cpp:313
virtual WipeTask * AsWipeTask() override
Definition: task.h:148
const std::string pname_
Definition: task.h:154
WipeTask(const FlashingPlan *fp, const std::string &pname)
Definition: task.cpp:297
std::pair< const Image *, std::string > ImageEntry
Definition: fastboot.h:89
std::unique_ptr< sparse_file, decltype(&sparse_file_destroy)> SparsePtr
Definition: util.h:30
uint32_t size
Definition: io.h:2
Definition: fastboot.h:91
Definition: fastboot.h:79