org.gradle.caching.internal.tasks.ChmodBenchmark Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of gradle-api Show documentation
Show all versions of gradle-api Show documentation
Gradle 6.9.1 API redistribution.
/*
* Copyright 2017 the original author or authors.
*
* 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 org.gradle.caching.internal.tasks;
import org.apache.commons.io.FileUtils;
import org.gradle.internal.nativeintegration.filesystem.FileSystem;
import org.gradle.internal.nativeintegration.services.FileSystems;
import org.gradle.internal.nativeintegration.services.NativeServices;
import org.openjdk.jmh.annotations.Benchmark;
import org.openjdk.jmh.annotations.Fork;
import org.openjdk.jmh.annotations.Level;
import org.openjdk.jmh.annotations.Measurement;
import org.openjdk.jmh.annotations.Scope;
import org.openjdk.jmh.annotations.Setup;
import org.openjdk.jmh.annotations.State;
import org.openjdk.jmh.annotations.TearDown;
import org.openjdk.jmh.annotations.Warmup;
import org.openjdk.jmh.infra.Blackhole;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.attribute.PosixFilePermission;
import java.util.EnumSet;
import java.util.Set;
import java.util.concurrent.atomic.AtomicInteger;
import static java.nio.file.attribute.PosixFilePermission.*;
@Fork(1)
@Warmup(iterations = 10)
@Measurement(iterations = 10)
@State(Scope.Benchmark)
@SuppressWarnings("OctalInteger")
public class ChmodBenchmark {
private static final int DEFAULT_JAVA6_FILE_PERMISSIONS = 0644;
private static final Set DEFAULT_JAVA7_FILE_PERMISSIONS = EnumSet.of(
OWNER_READ, OWNER_WRITE, GROUP_READ, OTHERS_READ
);
private static final int WEIRD_JAVA6_FILE_PERMISSIONS = 0123;
private static final Set WEIRD_JAVA7_FILE_PERMISSIONS = EnumSet.of(
OWNER_EXECUTE, GROUP_WRITE, OTHERS_WRITE, OTHERS_EXECUTE
);
Path tempRootDir;
Path tempDirPath;
File tempDirFile;
AtomicInteger counter;
FileSystem fileSystem;
@Setup(Level.Trial)
public void setupTrial() throws IOException {
this.tempRootDir = Files.createTempDirectory("chmod-benchmark");
NativeServices.initialize(tempRootDir.toFile());
this.fileSystem = FileSystems.getDefault();
}
@TearDown(Level.Trial)
public void tearDownTrial() throws IOException {
FileUtils.forceDelete(tempRootDir.toFile());
}
@Setup(Level.Iteration)
public void setupIteration() throws IOException {
this.tempDirPath = Files.createTempDirectory(tempRootDir, "iteration");
this.tempDirFile = tempDirPath.toFile();
this.counter = new AtomicInteger(0);
}
@TearDown(Level.Iteration)
public void tearDownIteration() throws IOException {
FileUtils.forceDelete(tempDirFile);
}
@Benchmark
public void createFileJava6(Blackhole blackhole) throws IOException {
File file = new File(tempDirFile, "file-" + counter.incrementAndGet());
boolean created = file.createNewFile();
blackhole.consume(created);
}
@Benchmark
public void createFileJava7(Blackhole blackhole) throws IOException {
Path file = Files.createFile(tempDirPath.resolve("file-" + counter.incrementAndGet()));
blackhole.consume(file);
}
@Benchmark
public void createFileJava6SetDefaultPermission(Blackhole blackhole) throws IOException {
File file = new File(tempDirFile, "file-" + counter.incrementAndGet());
boolean created = file.createNewFile();
fileSystem.chmod(file, 0644);
blackhole.consume(created);
}
@Benchmark
public void createFileJava7SetDefaultPermission(Blackhole blackhole) throws IOException {
Path file = Files.createFile(tempDirPath.resolve("file-" + counter.incrementAndGet()));
Files.setPosixFilePermissions(file, DEFAULT_JAVA7_FILE_PERMISSIONS);
blackhole.consume(file);
}
@Benchmark
public void createFileJava6SetMixedPermission(Blackhole blackhole) throws IOException {
int incrementAndGet = counter.incrementAndGet();
File file = new File(tempDirFile, "file-" + counter.incrementAndGet());
boolean created = file.createNewFile();
blackhole.consume(created);
int permissionsToSet;
if (incrementAndGet % 2 == 0) {
permissionsToSet = DEFAULT_JAVA6_FILE_PERMISSIONS;
} else {
permissionsToSet = WEIRD_JAVA6_FILE_PERMISSIONS;
}
fileSystem.chmod(file, permissionsToSet);
blackhole.consume(file);
}
@Benchmark
public void createFileJava7SetMixedPermission(Blackhole blackhole) throws IOException {
int incrementAndGet = counter.incrementAndGet();
Path file = Files.createFile(tempDirPath.resolve("file-" + incrementAndGet));
Set permissionsToSet;
if (incrementAndGet % 2 == 0) {
permissionsToSet = DEFAULT_JAVA7_FILE_PERMISSIONS;
} else {
permissionsToSet = WEIRD_JAVA7_FILE_PERMISSIONS;
}
Files.setPosixFilePermissions(file, permissionsToSet);
blackhole.consume(file);
}
@Benchmark
public void createFileJava6SetPermissionsWhenNeeded(Blackhole blackhole) throws IOException {
int incrementAndGet = counter.incrementAndGet();
File file = new File(tempDirFile, "file-" + counter.incrementAndGet());
boolean created = file.createNewFile();
blackhole.consume(created);
int originalPermissions = fileSystem.getUnixMode(file);
int permissionsToSet;
if (incrementAndGet % 2 == 0) {
permissionsToSet = DEFAULT_JAVA6_FILE_PERMISSIONS;
} else {
permissionsToSet = WEIRD_JAVA6_FILE_PERMISSIONS;
}
// This should pass 50% of the time
if (originalPermissions != permissionsToSet) {
fileSystem.chmod(file, permissionsToSet);
}
blackhole.consume(file);
}
@Benchmark
public void createFileJava7SetPermissionsWhenNeeded(Blackhole blackhole) throws IOException {
int incrementAndGet = counter.incrementAndGet();
Path file = Files.createFile(tempDirPath.resolve("file-" + incrementAndGet));
Set originalPermissions = Files.getPosixFilePermissions(file);
Set permissionsToSet;
if (incrementAndGet % 2 == 0) {
permissionsToSet = DEFAULT_JAVA7_FILE_PERMISSIONS;
} else {
permissionsToSet = WEIRD_JAVA7_FILE_PERMISSIONS;
}
// This should pass 50% of the time
if (!originalPermissions.equals(permissionsToSet)) {
Files.setPosixFilePermissions(file, permissionsToSet);
}
blackhole.consume(file);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy