public PercentileEstimator export() { PercentileEstimator.Builder builder = PercentileEstimator.newBuilder(); if (mBuckets == null) { for (int i = 0; i < mCount; ++i) { builder.addRawSample(mInitialData[i]); } } else { for (Bucket b : mBuckets) { builder.addBucketBuilder().setTargetPercentile(b.target).setValue(b.value).setCount(b.count).build(); } } return builder.build(); }
Project(long id) { properties = GradleBuildProject.newBuilder(); properties.setId(id); }
private GradleBuildMemorySample createAndRecordMemorySample() { GradleBuildMemorySample stats = GradleBuildMemorySample.newBuilder() .setJavaProcessStats(CommonMetricsData.getJavaProcessStats()) .setTimestamp(System.currentTimeMillis()) .build(); if (stats != null) { mBuild.addMemorySample(stats); } return stats; }
mBuild.addAllSpan(spans); GradleBuildMemorySample memoryStats = createAndRecordMemorySample(); mBuild.setBuildTime( memoryStats.getTimestamp() - mStartMemoryStats.getTimestamp()); mBuild.setGcCount( memoryStats.getGcCount() - mStartMemoryStats.getGcCount()); mBuild.setGcTime( memoryStats.getGcTimeMs() - mStartMemoryStats.getGcTimeMs()); project.properties.addVariant(variant); mBuild.addProject(project.properties); Files.newOutputStream( mBenchmarkProfileOutputFile, StandardOpenOption.CREATE_NEW))) { mBuild.build().writeTo(outputStream); AndroidStudioEvent.newBuilder() .setCategory(AndroidStudioEvent.EventCategory.GRADLE) .setKind(AndroidStudioEvent.EventKind.GRADLE_BUILD_PROFILE) .setGradleBuildProfile(mBuild.build()) .setJavaProcessStats(CommonMetricsData.getJavaProcessStats()) .setJvmDetails(CommonMetricsData.getJvmDetails()));
@Override public void afterExecute(@NonNull Task task, @NonNull TaskState taskState) { GradleBuildProfileSpan.Builder record = taskRecords.remove(task.getPath()); record.setDurationInMs(System.currentTimeMillis() - record.getStartTimeInMs()); //noinspection ThrowableResultOfMethodCallIgnored Just logging the failure. record.setTask( GradleTaskExecution.newBuilder() .setType(AnalyticsUtil.getTaskExecutionType(task.getClass())) .setDidWork(taskState.getDidWork()) .setSkipped(taskState.getSkipped()) .setUpToDate(taskState.getUpToDate()) .setFailed(taskState.getFailure() != null)); recordWriter.writeRecord(task.getProject().getPath(), getVariantName(task), record); ProcessProfileWriter.recordMemorySample(); }
@Override public void beforeExecute(@NonNull Task task) { GradleBuildProfileSpan.Builder builder = GradleBuildProfileSpan.newBuilder(); builder.setType(ExecutionType.TASK_EXECUTION); builder.setId(recordWriter.allocateRecordId()); builder.setStartTimeInMs(System.currentTimeMillis()); taskRecords.put(task.getPath(), builder); }
/** Generate a scrubbed proto of the instant run build context for analytics. */ @NonNull public static InstantRunStatus generateAnalyticsProto( @NonNull InstantRunBuildContext instantRunBuildContext) { InstantRunStatus.Builder builder = InstantRunStatus.newBuilder(); builder.setBuildMode(convert(instantRunBuildContext.getBuildMode())); builder.setPatchingPolicy(convert(instantRunBuildContext.getPatchingPolicy())); builder.setVerifierStatus(convert(instantRunBuildContext.getVerifierResult())); InstantRunBuildContext.Build last = instantRunBuildContext.getLastBuild(); if (last != null) { for (InstantRunBuildContext.Artifact artifact : last.getArtifacts()) { builder.addArtifact( InstantRunArtifact.newBuilder().setType(convert(artifact.getType()))); } } return builder.build(); }
if (e.getBucketCount() > 0) { double[] markers = computeNonExtremeMarkers(targets); assert(markers.length == r.mNumBuckets - 2); if (r.mNumBuckets != e.getBucketCount()) { throw new MismatchedTargetsException("Mismatched target lengths"); if (e.getBucket(0).getTargetPercentile() != 0.0) { throw new MismatchedTargetsException("First bucket target percentile was not 0.0"); if (e.getBucket(e.getBucketCount() - 1).getTargetPercentile() != 1.0) { throw new MismatchedTargetsException("Last bucket target percentile was not 1.0"); PercentileBucket b = e.getBucket(i); if (b.getTargetPercentile() != markers[i - 1]) { throw new MismatchedTargetsException("Mismatched targets at index " + i); if (e.getRawSampleCount() > 0) { assert(e.getBucketCount() == 0); for (int i = 0; i < e.getRawSampleCount(); ++i) { r.addSample(e.getRawSample(i)); } else if (e.getBucketCount() > 0) { r.mInitialData = null; r.mBuckets = new Bucket[e.getBucketCount()]; r.mCount = e.getBucket(e.getBucketCount() - 1).getCount(); for (int i = 0; i < e.getBucketCount(); ++i) { PercentileBucket bucket = e.getBucket(i); r.mBuckets[i] = new Bucket(bucket.getTargetPercentile(), bucket.getValue(), bucket.getCount(), r.mCount);
/** Gets stats about the current process java runtime. */ public static JavaProcessStats getJavaProcessStats() { MemoryMXBean memoryBean = HostData.getMemoryBean(); ClassLoadingMXBean classLoadingBean = HostData.getClassLoadingBean(); return JavaProcessStats.newBuilder() .setHeapMemoryUsage(memoryBean.getHeapMemoryUsage().getUsed()) .setNonHeapMemoryUsage(memoryBean.getNonHeapMemoryUsage().getUsed()) .setLoadedClassCount(classLoadingBean.getLoadedClassCount()) .addAllGarbageCollectionStats(getGarbageCollectionStats()) .setThreadCount(HostData.getThreadBean().getThreadCount()) .build(); }
/** Logs usage data provided in the @{link AndroidStudioEvent}. */ public void log(@NonNull AndroidStudioEvent.Builder studioEvent) { studioEvent.setStudioSessionId(sSessionId); if (mVersion != null && !studioEvent.hasProductDetails()) { studioEvent.setProductDetails(ProductDetails.newBuilder().setVersion(mVersion)); } long now = sDateProvider.now().getTime(); try { logDetails( ClientAnalytics.LogEvent.newBuilder() .setEventTimeMs(now) .setEventUptimeMs(now - mStartTimeMs) .setSourceExtension(studioEvent.build().toByteString())); } catch (NullPointerException exception) { // TODO: Temporary fix for http://b.android.com/224994. We should remove this try-catch // block once there is a permanent fix. logDetails( ClientAnalytics.LogEvent.newBuilder() .setEventTimeMs(now) .setEventUptimeMs(now - mStartTimeMs)); } }
/** * Gets details about the machine this code is running on. * * @param homePath path to use to track total disk space. */ @NonNull public static MachineDetails getMachineDetails(@NonNull File homePath) { OperatingSystemMXBean osBean = HostData.getOsBean(); return MachineDetails.newBuilder() .setAvailableProcessors(osBean.getAvailableProcessors()) .setTotalRam(osBean.getTotalPhysicalMemorySize()) .setTotalDisk(homePath.getTotalSpace()) .addAllDisplay(getDisplayDetails()) .build(); }
private void recordMetrics() { long metricsStartTime = System.nanoTime(); GradleBuildProjectMetrics.Builder metrics = GradleBuildProjectMetrics.newBuilder(); Long apkSize = getSize(getOutputFile()); if (apkSize != null) { metrics.setApkSize(apkSize); } Long resourcesApSize = getSize(getResourceFile()); if (resourcesApSize != null) { metrics.setResourcesApSize(resourcesApSize); } metrics.setMetricsTimeNs(System.nanoTime() - metricsStartTime); ProcessProfileWriter.getProject(getProject().getPath()).setMetrics(metrics); }
/** Gets information about the jvm this code is running in. */ @NonNull public static JvmDetails getJvmDetails() { RuntimeMXBean runtime = HostData.getRuntimeBean(); JvmDetails.Builder builder = JvmDetails.newBuilder() .setName(Strings.nullToEmpty(runtime.getVmName())) .setVendor(Strings.nullToEmpty(runtime.getVmVendor())) .setVersion(Strings.nullToEmpty(runtime.getVmVersion())); for (String vmOption : runtime.getInputArguments()) { parseVmOption(vmOption, builder); } return builder.build(); }
/** Gets information about all the displays connected to this machine. */ @NonNull private static Iterable<? extends DisplayDetails> getDisplayDetails() { List<DisplayDetails> displays = new ArrayList<>(); GraphicsEnvironment graphics = HostData.getGraphicsEnvironment(); if (!graphics.isHeadlessInstance()) { for (GraphicsDevice device : graphics.getScreenDevices()) { Rectangle bounds = device.getDefaultConfiguration().getBounds(); displays.add( DisplayDetails.newBuilder() .setHeight(bounds.height) .setWidth(bounds.width) .build()); } } return displays; }
/** Append a span record to the build profile. Thread safe. */ @Override public void writeRecord( @NonNull String project, @Nullable String variant, @NonNull final GradleBuildProfileSpan.Builder executionRecord) { executionRecord.setProject(mNameAnonymizer.anonymizeProjectPath(project)); executionRecord.setVariant(mNameAnonymizer.anonymizeVariant(project, variant)); spans.add(executionRecord.build()); }
public static GradleTransformExecution.Type getTransformType( @NonNull Class<? extends Transform> taskClass) { try { return GradleTransformExecution.Type.valueOf(getPotentialTransformTypeName(taskClass)); } catch (IllegalArgumentException ignored) { return GradleTransformExecution.Type.UNKNOWN_TRANSFORM_TYPE; } }
@VisibleForTesting @NonNull static InstantRunStatus.VerifierStatus convert(@NonNull InstantRunVerifierStatus status) { try { return InstantRunStatus.VerifierStatus.valueOf(status.toString()); } catch (IllegalArgumentException ignored) { return InstantRunStatus.VerifierStatus.UNKNOWN_VERIFIER_STATUS; } }
@NonNull public static GradleTaskExecution.Type getTaskExecutionType(@NonNull Class<?> taskClass) { try { return GradleTaskExecution.Type.valueOf(getPotentialTaskExecutionTypeName(taskClass)); } catch (IllegalArgumentException ignored) { return GradleTaskExecution.Type.UNKNOWN_TASK_TYPE; } }
private void addVariant( @NonNull String projectPath, @NonNull String variantName, @NonNull GradleBuildVariant.Builder properties) { Project project = mProjects.getUnchecked(projectPath); properties.setId(mNameAnonymizer.anonymizeVariant(projectPath, variantName)); project.variants.put(variantName, properties); }
public static GradleBuildVariant.Builder addVariant( @NonNull String projectPath, @NonNull String variantName) { GradleBuildVariant.Builder properties = GradleBuildVariant.newBuilder(); get().addVariant(projectPath, variantName, properties); return properties; }