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 
17 #include <cstddef>
18 #include <memory>
19 
20 #include <base/logging.h>
21 
22 #include "update_engine/payload_consumer/vabc_partition_writer.h"
23 
24 namespace chromeos_update_engine::partition_writer {
25 
CreatePartitionWriter(const PartitionUpdate & partition_update,const InstallPlan::Partition & install_part,DynamicPartitionControlInterface * dynamic_control,size_t block_size,bool is_interactive,bool is_dynamic_partition)26 std::unique_ptr<PartitionWriter> CreatePartitionWriter(
27     const PartitionUpdate& partition_update,
28     const InstallPlan::Partition& install_part,
29     DynamicPartitionControlInterface* dynamic_control,
30     size_t block_size,
31     bool is_interactive,
32     bool is_dynamic_partition) {
33   if (dynamic_control && dynamic_control->UpdateUsesSnapshotCompression() &&
34       is_dynamic_partition) {
35     LOG(INFO)
36         << "Virtual AB Compression Enabled, using VABC Partition Writer for `"
37         << install_part.name << '`';
38     return std::make_unique<VABCPartitionWriter>(partition_update,
39                                                  install_part,
40                                                  dynamic_control,
41                                                  block_size,
42                                                  is_interactive);
43   } else {
44     LOG(INFO) << "Virtual AB Compression disabled, using Partition Writer for `"
45               << install_part.name << '`';
46     return std::make_unique<PartitionWriter>(partition_update,
47                                              install_part,
48                                              dynamic_control,
49                                              block_size,
50                                              is_interactive);
51   }
52 }
53 }  // namespace chromeos_update_engine::partition_writer
54