/* * Copyright 2017-present Facebook, Inc. * * 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. */ package com.facebook.buck.rules; import static org.junit.Assert.assertEquals; import com.facebook.buck.timing.ClockDuration; import org.junit.Test; public class BuildRuleDurationTrackerTest { @Test public void test() { BuildRuleDurationTracker tracker = new BuildRuleDurationTracker(); BuildRule rule1 = new FakeBuildRule("//fake:rule1"); BuildRule rule2 = new FakeBuildRule("//fake:rule2"); /** * 10 15 20 22 23 26 30 31 33 35 37 . . . . . . . . . . . |-rule1-| . . . . . . . . . * |---rule1---| . . . . . |-------rule1-------| . . |---rule1---| . . . |------rule1------| . . * |--------rule2-------| * * <p>Note that the total wall time for rule1 is 5 + 17 = 22. We count overlaps only once. * Thread time on the other hand is always added, regardless of overlapping. * * <p>Durations for rule1 and rule2 are completely independent of each other. */ assertEquals(new ClockDuration(0, 0, 0), tracker.doBeginning(rule1, 10, 10000)); assertEquals(new ClockDuration(5, 5000, 900), tracker.doEnding(rule1, 15, 15000, 900)); assertEquals(new ClockDuration(5, 5000, 900), tracker.doBeginning(rule1, 20, 20000)); assertEquals(new ClockDuration(7, 7000, 900), tracker.doBeginning(rule1, 22, 22000)); assertEquals(new ClockDuration(8, 8000, 900), tracker.doBeginning(rule1, 23, 23000)); assertEquals(new ClockDuration(0, 0, 0), tracker.doBeginning(rule2, 23, 23000)); assertEquals(new ClockDuration(11, 11000, 1200), tracker.doEnding(rule1, 26, 26000, 300)); assertEquals(new ClockDuration(15, 15000, 1200), tracker.doBeginning(rule1, 30, 30000)); assertEquals(new ClockDuration(16, 16000, 1300), tracker.doEnding(rule1, 31, 31000, 100)); assertEquals(new ClockDuration(18, 18000, 1500), tracker.doEnding(rule1, 33, 33000, 200)); assertEquals(new ClockDuration(12, 12000, 42), tracker.doEnding(rule2, 35, 35000, 42)); assertEquals(new ClockDuration(22, 22000, 1900), tracker.doEnding(rule1, 37, 37000, 400)); } }