You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

103 lines
4.5 KiB

// Copyright 2018 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.
#include "MockAndroidVmOperations.h"
#include "HostAddressSpace.h"
#include "host-common/HostmemIdMapping.h"
using android::HostAddressSpaceDevice;
static bool sSkipSnapshotSave = false;
static const QAndroidVmOperations sQAndroidVmOperations = {
.vmStop = []() -> bool {
return android::MockAndroidVmOperations::mock->vmStop();
},
.vmStart = []() -> bool {
return android::MockAndroidVmOperations::mock->vmStart();
},
.vmReset = nullptr, // Not currently mocked.
.vmShutdown = nullptr, // Not currently mocked.
.vmPause = nullptr, // Not currently mocked.
.vmResume = nullptr, // Not currently mocked.
.vmIsRunning = nullptr, // Not currently mocked.
.snapshotList = nullptr, // Not currently mocked.
.snapshotSave = [](const char* name,
void* opaque,
LineConsumerCallback errConsumer) -> bool {
return android::MockAndroidVmOperations::mock->snapshotSave(
name, opaque, errConsumer);
},
.snapshotLoad = [](const char* name,
void* opaque,
LineConsumerCallback errConsumer) -> bool {
return android::MockAndroidVmOperations::mock->snapshotLoad(
name, opaque, errConsumer);
},
.snapshotDelete = nullptr, // Not currently mocked.
.snapshotRemap = [](bool shared,
void* opaque,
LineConsumerCallback errConsumer) -> bool {
return android::MockAndroidVmOperations::mock->snapshotRemap(
shared, opaque, errConsumer);
},
.snapshotExport = [](const char* snapshot,
const char* dest,
void* opaque,
LineConsumerCallback errConsumer) -> bool {
return android::MockAndroidVmOperations::mock->snapshotExport(
snapshot, dest, opaque, errConsumer);
},
.setSnapshotCallbacks =
[](void* opaque, const SnapshotCallbacks* callbacks) {
return android::MockAndroidVmOperations::mock
->setSnapshotCallbacks(opaque, callbacks);
},
.mapUserBackedRam =
[](uint64_t gpa, void* hva, uint64_t size) {
HostAddressSpaceDevice::get()->setHostAddrByPhysAddr(gpa,
hva);
},
.unmapUserBackedRam =
[](uint64_t gpa, uint64_t size) {
HostAddressSpaceDevice::get()->unsetHostAddrByPhysAddr(gpa);
},
.getVmConfiguration = nullptr, // Not currently mocked.
.setFailureReason = nullptr, // Not currently mocked.
.setExiting = nullptr, // Not currently mocked.
.allowRealAudio = nullptr, // Not currently mocked.
.physicalMemoryGetAddr =
[](uint64_t gpa) {
void* res = HostAddressSpaceDevice::get()->getHostAddr(gpa);
if (!res)
return (void*)(uintptr_t)gpa;
return res;
},
.isRealAudioAllowed = nullptr, // Not currently mocked.
.setSkipSnapshotSave = [](bool skip) { sSkipSnapshotSave = skip; },
.isSnapshotSaveSkipped = []() -> bool { return sSkipSnapshotSave; },
.hostmemRegister = android_emulation_hostmem_register,
.hostmemUnregister = android_emulation_hostmem_unregister,
.hostmemGetInfo = android_emulation_hostmem_get_info,
};
extern "C" const QAndroidVmOperations* const gMockQAndroidVmOperations =
&sQAndroidVmOperations;
namespace android {
MockAndroidVmOperations* MockAndroidVmOperations::mock = nullptr;
} // namespace android