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