blob: a612c55a0226e9378279f72f6b7f475d9fba5dca [file] [log] [blame]
// Copyright (c) 2013, 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.
library observe.test.benchmark.path_benchmark;
import 'package:observe/observe.dart';
import 'observation_benchmark_base.dart';
import 'test_path_observable.dart';
class PathBenchmark extends ObservationBenchmarkBase<TestPathObservable> {
final PropertyPath path = new PropertyPath('foo.bar.baz');
PathBenchmark(int objectCount, int mutationCount, String config)
: super('PathBenchmark:$objectCount:$mutationCount:$config', objectCount,
mutationCount, config);
@override
int mutateObject(TestPathObservable obj) {
switch (config) {
case 'leaf':
obj.foo.bar.baz += 1;
// Make sure [obj.foo.bar] delivers its changes synchronously. The base
// class already handles this for [obj].
obj.foo.bar.deliverChanges();
return 1;
case 'root':
obj.foo = new Foo(obj.foo.bar.baz + 1);
return 1;
default:
throw new ArgumentError('Invalid config for PathBenchmark: $config');
}
}
@override
TestPathObservable newObject() => new TestPathObservable(1);
@override
PathObserver newObserver(TestPathObservable obj) =>
new PathObserver(obj, path)..open((_) => mutations--);
}