Refactor: Use InvokeContext in all Syscalls (#21545)
* Adds ComputeMeter::mock_set_remaining(). * Adds InvokeContext::get_loader() * Adds a LogCollector to InvokeContext::new_mock(). * Adds "invoke_context: Rc<RefCell<&'a mut dyn InvokeContext>>," to all SyscallObjects. * Adds LogCollector::get_recorded_content(). * Removes loader_id parameter from bind_syscall_context_objects() and create_vm().
This commit is contained in:
committed by
GitHub
parent
9079de825b
commit
6330cbcf33
@ -12,7 +12,10 @@ use solana_bpf_loader_program::{
|
||||
};
|
||||
use solana_measure::measure::Measure;
|
||||
use solana_program_runtime::invoke_context::{with_mock_invoke_context, InvokeContext};
|
||||
use solana_rbpf::{elf::Executable, vm::{Config, InstructionMeter, SyscallRegistry}};
|
||||
use solana_rbpf::{
|
||||
elf::Executable,
|
||||
vm::{Config, InstructionMeter, SyscallRegistry},
|
||||
};
|
||||
use solana_runtime::{
|
||||
bank::Bank,
|
||||
bank_client::BankClient,
|
||||
@ -107,7 +110,6 @@ fn bench_program_alu(bencher: &mut Bencher) {
|
||||
let compute_meter = invoke_context.get_compute_meter();
|
||||
let mut instruction_meter = ThisInstructionMeter { compute_meter };
|
||||
let mut vm = create_vm(
|
||||
&loader_id,
|
||||
&executable,
|
||||
&mut inner_iter,
|
||||
invoke_context,
|
||||
@ -203,12 +205,7 @@ fn bench_create_vm(bencher: &mut Bencher) {
|
||||
let loader_id = bpf_loader::id();
|
||||
with_mock_invoke_context(loader_id, 10000001, |invoke_context| {
|
||||
const BUDGET: u64 = 200_000;
|
||||
let compute_meter = invoke_context.get_compute_meter();
|
||||
{
|
||||
let mut compute_meter = compute_meter.borrow_mut();
|
||||
let to_consume = compute_meter.get_remaining() - BUDGET;
|
||||
compute_meter.consume(to_consume).unwrap();
|
||||
}
|
||||
invoke_context.get_compute_meter().borrow_mut().mock_set_remaining(BUDGET);
|
||||
|
||||
// Serialize account data
|
||||
let keyed_accounts = invoke_context.get_keyed_accounts().unwrap();
|
||||
@ -230,7 +227,6 @@ fn bench_create_vm(bencher: &mut Bencher) {
|
||||
|
||||
bencher.iter(|| {
|
||||
let _ = create_vm(
|
||||
&loader_id,
|
||||
&executable,
|
||||
serialized.as_slice_mut(),
|
||||
invoke_context,
|
||||
@ -247,12 +243,7 @@ fn bench_instruction_count_tuner(_bencher: &mut Bencher) {
|
||||
let loader_id = bpf_loader::id();
|
||||
with_mock_invoke_context(loader_id, 10000001, |invoke_context| {
|
||||
const BUDGET: u64 = 200_000;
|
||||
let compute_meter = invoke_context.get_compute_meter();
|
||||
{
|
||||
let mut compute_meter = compute_meter.borrow_mut();
|
||||
let to_consume = compute_meter.get_remaining() - BUDGET;
|
||||
compute_meter.consume(to_consume).unwrap();
|
||||
}
|
||||
invoke_context.get_compute_meter().borrow_mut().mock_set_remaining(BUDGET);
|
||||
|
||||
// Serialize account data
|
||||
let keyed_accounts = invoke_context.get_keyed_accounts().unwrap();
|
||||
@ -271,9 +262,9 @@ fn bench_instruction_count_tuner(_bencher: &mut Bencher) {
|
||||
register_syscalls(invoke_context).unwrap(),
|
||||
)
|
||||
.unwrap();
|
||||
let compute_meter = invoke_context.get_compute_meter();
|
||||
let mut instruction_meter = ThisInstructionMeter { compute_meter };
|
||||
let mut vm = create_vm(
|
||||
&loader_id,
|
||||
&executable,
|
||||
serialized.as_slice_mut(),
|
||||
invoke_context,
|
||||
|
Reference in New Issue
Block a user