// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

// Micro-benchmark for creating TypeData lists from Pointers.
//
// The FfiMemory benchmark tests accessing memory through TypedData.

// @dart=2.9

import 'dart:ffi';

import 'package:benchmark_harness/benchmark_harness.dart';
import 'package:ffi/ffi.dart';

//
// Benchmark fixture.
//

// Number of repeats: 1000
const N = 1000;

class FromPointerInt8 extends BenchmarkBase {
  Pointer<Int8> pointer = nullptr;
  FromPointerInt8() : super('FfiAsTypedList.FromPointerInt8');

  @override
  void setup() => pointer = calloc(1);
  @override
  void teardown() => calloc.free(pointer);

  @override
  void run() {
    for (var i = 0; i < N; i++) {
      pointer.asTypedList(1);
    }
  }
}

//
// Main driver.
//

void main() {
  final benchmarks = [
    () => FromPointerInt8(),
  ];
  for (final benchmark in benchmarks) {
    benchmark().report();
  }
}
