| /* | |
| * Copyright (C) 2017 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. | |
| */ | |
| #pragma once | |
| #include "interface.h" | |
| #include <memory> | |
| #include <string> | |
| #include <stdint.h> | |
| struct SnapshotRamBlock { | |
| const char* id; | |
| int64_t startOffset; | |
| uint8_t* hostPtr; | |
| int64_t totalSize; | |
| int32_t pageSize; | |
| uint32_t flags; | |
| std::string path; | |
| bool readonly; | |
| bool needRestoreFromRamFile; | |
| }; | |
| namespace android { | |
| namespace snapshot { | |
| class ITextureSaver; | |
| class TextureSaver; | |
| class ITextureLoader; | |
| class TextureLoader; | |
| using ITextureSaverPtr = std::shared_ptr<ITextureSaver>; | |
| using ITextureLoaderPtr = std::shared_ptr<ITextureLoader>; | |
| using ITextureLoaderWPtr = std::weak_ptr<ITextureLoader>; | |
| // Taken from exec.c, these #defines | |
| // are for the |flags| field in SnapshotRamBlock. | |
| #define SNAPSHOT_RAM_MAPPED_SHARED (1 << 1) | |
| #define SNAPSHOT_RAM_MAPPED (1 << 3) | |
| #define SNAPSHOT_RAM_USER_BACKED (1 << 4) | |
| using RamBlock = ::SnapshotRamBlock; | |
| enum class IndexFlags { | |
| Empty = 0, | |
| CompressedPages = 0x01, | |
| SeparateBackingStore = 0x02, | |
| }; | |
| enum class OperationStatus { | |
| NotStarted = SNAPSHOT_STATUS_NOT_STARTED, | |
| Ok = SNAPSHOT_STATUS_OK, | |
| Error = SNAPSHOT_STATUS_ERROR, | |
| Canceled = SNAPSHOT_STATUS_CANCELED, | |
| }; | |
| enum class FailureReason { | |
| Empty = 0, | |
| CorruptedData, | |
| NoSnapshotPb, | |
| BadSnapshotPb, | |
| IncompatibleVersion, | |
| NoRamFile, | |
| NoTexturesFile, | |
| SnapshotsNotSupported, | |
| Canceled, | |
| Tombstone, | |
| UnrecoverableErrorLimit = 10000, | |
| NoSnapshotInImage, | |
| ConfigMismatchHostHypervisor, | |
| ConfigMismatchHostGpu, | |
| ConfigMismatchRenderer, | |
| ConfigMismatchFeatures, | |
| ConfigMismatchAvd, | |
| SystemImageChanged, | |
| ValidationErrorLimit = 20000, | |
| InternalError, | |
| EmulationEngineFailed, | |
| RamFailed, | |
| TexturesFailed, | |
| AdbOffline, | |
| OutOfDiskSpace, | |
| InProgressLimit = 30000, | |
| }; | |
| FailureReason errnoToFailure(int error); | |
| const char* failureReasonToString(FailureReason failure, | |
| SnapshotOperation op); | |
| template <class Operation> | |
| bool isComplete(const Operation& op) { | |
| return op.status() != OperationStatus::NotStarted; | |
| } | |
| bool isBufferZeroed(const void* ptr, int32_t size); | |
| #if defined(__APPLE__) && defined(__aarch64__) | |
| constexpr int32_t kDefaultPageSize = 16384; | |
| #else | |
| constexpr int32_t kDefaultPageSize = 4096; | |
| #endif | |
| constexpr int32_t kCancelTimeoutMs = 15000; | |
| // Size in bytes of largest in-flight RAM region for decommitting. | |
| constexpr uint64_t kDecommitChunkSize = 4096 * 4096; // 16 MB | |
| constexpr const char* kDefaultBootSnapshot = "default_boot"; | |
| constexpr const char* kRamFileName = "ram.bin"; | |
| constexpr const char* kTexturesFileName = "textures.bin"; | |
| constexpr const char* kMappedRamFileName = "ram.img"; | |
| constexpr const char* kMappedRamFileDirtyName = "ram.img.dirty"; | |
| constexpr const char* kSnapshotProtobufName = "snapshot.pb"; | |
| void resetSnapshotLiveness(); | |
| bool isSnapshotAlive(); | |
| #ifdef AEMU_MIN | |
| #define SNAPSHOT_METRICS 0 | |
| #else | |
| #define SNAPSHOT_METRICS 1 | |
| #endif | |
| enum SnapshotterOperation { | |
| SNAPSHOTTER_OPERATION_SAVE, | |
| SNAPSHOTTER_OPERATION_LOAD, | |
| }; | |
| enum SnapshotterStage { | |
| SNAPSHOTTER_STAGE_START, | |
| SNAPSHOTTER_STAGE_END, | |
| }; | |
| } // namespace snapshot | |
| } // namespace android |