Add profiling for external repository download and extraction.

RELNOTES: None
PiperOrigin-RevId: 279729299
diff --git a/src/main/java/com/google/devtools/build/lib/BUILD b/src/main/java/com/google/devtools/build/lib/BUILD
index aed9942..d56e086 100644
--- a/src/main/java/com/google/devtools/build/lib/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/BUILD
@@ -956,6 +956,7 @@
         "//src/main/java/com/google/devtools/build/lib/bazel/repository/cache:events",
         "//src/main/java/com/google/devtools/build/lib/bazel/repository/downloader",
         "//src/main/java/com/google/devtools/build/lib/concurrent",
+        "//src/main/java/com/google/devtools/build/lib/profiler",
         "//src/main/java/com/google/devtools/build/lib/shell",
         "//src/main/java/com/google/devtools/build/lib/skylarkbuildapi/repository",
         "//src/main/java/com/google/devtools/build/lib/vfs",
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkRepositoryContext.java b/src/main/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkRepositoryContext.java
index 8bb7f8c..26a3d46 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkRepositoryContext.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkRepositoryContext.java
@@ -42,6 +42,8 @@
 import com.google.devtools.build.lib.packages.StructImpl;
 import com.google.devtools.build.lib.packages.StructProvider;
 import com.google.devtools.build.lib.pkgcache.PathPackageLocator;
+import com.google.devtools.build.lib.profiler.Profiler;
+import com.google.devtools.build.lib.profiler.SilentCloseable;
 import com.google.devtools.build.lib.rules.repository.RepositoryFunction;
 import com.google.devtools.build.lib.rules.repository.RepositoryFunction.RepositoryFunctionException;
 import com.google.devtools.build.lib.rules.repository.WorkspaceAttributeMapper;
@@ -619,7 +621,8 @@
             location);
     env.getListener().post(w);
     Path downloadedPath;
-    try {
+    try (SilentCloseable c =
+        Profiler.instance().profile("fetching: " + rule.getLabel().toString())) {
       checkInOutputDirectory("write", outputPath);
       makeDirectories(outputPath.getPath());
       downloadedPath =
@@ -737,7 +740,8 @@
     createDirectory(outputPath.getPath());
 
     Path downloadedPath;
-    try {
+    try (SilentCloseable c =
+        Profiler.instance().profile("fetching: " + rule.getLabel().toString())) {
       downloadedPath =
           httpDownloader.download(
               urls,
@@ -766,14 +770,17 @@
       throw checksumValidation;
     }
     env.getListener().post(w);
-    DecompressorValue.decompress(
-        DecompressorDescriptor.builder()
-            .setTargetKind(rule.getTargetKind())
-            .setTargetName(rule.getName())
-            .setArchivePath(downloadedPath)
-            .setRepositoryPath(outputPath.getPath())
-            .setPrefix(stripPrefix)
-            .build());
+    try (SilentCloseable c =
+        Profiler.instance().profile("extracting: " + rule.getLabel().toString())) {
+      DecompressorValue.decompress(
+          DecompressorDescriptor.builder()
+              .setTargetKind(rule.getTargetKind())
+              .setTargetName(rule.getName())
+              .setArchivePath(downloadedPath)
+              .setRepositoryPath(outputPath.getPath())
+              .setPrefix(stripPrefix)
+              .build());
+    }
 
     StructImpl downloadResult = calculateDownloadResult(checksum, downloadedPath);
     try {