summaryrefslogtreecommitdiff
path: root/analytics
diff options
context:
space:
mode:
authorMatthew Gharrity <gharrma@google.com>2020-08-24 14:32:51 -0700
committerTreeHugger Robot <treehugger-gerrit@google.com>2020-08-24 22:45:51 +0000
commit3a6967e118442a395c28c32a6d30b340bc346e21 (patch)
tree1b730633e020c1596aa579252c4e183e9f798463 /analytics
parenta23a5a32c084c9fcf62223654e00916d29ed5367 (diff)
downloadidea-3a6967e118442a395c28c32a6d30b340bc346e21.tar.gz
Change HighlightingStats into application service
Now, HighlightingStats is loaded on demand after the first highlighting pass, and reports are sent each hour after that moment. That way, no code needs to run on application startup. Bug: not filed Test: manually tested that HighlightingStats sends data on app close Change-Id: Id849227a0529fb0a9b626b64f74a19c956284ca1
Diffstat (limited to 'analytics')
-rw-r--r--analytics/BUILD37
-rw-r--r--analytics/analytics.iml1
-rw-r--r--analytics/src/com/android/tools/analytics/HighlightingStats.kt20
3 files changed, 13 insertions, 45 deletions
diff --git a/analytics/BUILD b/analytics/BUILD
index 6f0e8566d6f..8450dfeede5 100644
--- a/analytics/BUILD
+++ b/analytics/BUILD
@@ -6,45 +6,9 @@ iml_module(
srcs = ["src"],
iml_files = ["analytics.iml"],
lint_baseline = "//tools/base/lint:studio-checks/empty_baseline.xml",
- # do not sort: must match IML order
- test_runtime_deps = [
- "//tools/idea/xml/dom-impl:intellij.xml.dom.impl",
- "//tools/idea/platform/testFramework/extensions:intellij.platform.testExtensions",
- "//tools/idea/images:intellij.platform.images",
- ],
test_srcs = ["testSrc"],
visibility = ["//visibility:public"],
# do not sort: must match IML order
- runtime_deps = [
- "//tools/idea/xml/dom-openapi:intellij.xml.dom",
- "//tools/idea/platform/usageView:intellij.platform.usageView",
- "//tools/idea/platform/execution-impl:intellij.platform.execution.impl",
- "//tools/idea/platform/inspect:intellij.platform.inspect",
- "//tools/idea/platform/credential-store:intellij.platform.credentialStore",
- "//tools/idea/xml/xml-structure-view-impl:intellij.xml.structureView.impl",
- "//tools/idea/spellchecker:intellij.spellchecker",
- "//tools/idea/platform/lvcs-impl:intellij.platform.lvcs.impl",
- "//tools/idea/platform/testRunner:intellij.platform.testRunner",
- "//tools/idea/platform/statistics/devkit:intellij.platform.statistics.devkit",
- "//tools/idea/platform/workspaceModel/ide:intellij.platform.workspaceModel.ide",
- "//tools/idea/platform/external-system-impl:intellij.platform.externalSystem.impl",
- "//tools/idea/platform/built-in-server:intellij.platform.builtInServer.impl",
- "//tools/idea/platform/tasks-platform-impl:intellij.platform.tasks.impl",
- "//tools/idea/.idea/libraries:delight-rhino-sandbox",
- "//tools/idea/.idea/libraries:rhino",
- "//tools/idea/.idea/libraries:netty-handler-proxy",
- "//tools/idea/platform/diagnostic:intellij.platform.diagnostic",
- "//tools/idea/.idea/libraries:error-prone-annotations",
- "//tools/idea/.idea/libraries:javax.activation",
- "//tools/idea/.idea/libraries:jaxb-api",
- "//tools/idea/.idea/libraries:jaxb-runtime",
- "//tools/idea/.idea/libraries:javax.annotation-api",
- "//tools/idea/.idea/libraries:org.codehaus.groovy_groovy-jsr223",
- "//tools/idea/.idea/libraries:org.codehaus.groovy_groovy-json",
- "//tools/idea/.idea/libraries:org.codehaus.groovy_groovy-templates",
- "//tools/idea/.idea/libraries:org.codehaus.groovy_groovy-xml",
- ],
- # do not sort: must match IML order
deps = [
"//tools/idea/.idea/libraries:kotlin-stdlib-jdk8",
"//tools/idea/.idea/libraries:studio-analytics-proto",
@@ -53,7 +17,6 @@ iml_module(
"//tools/idea/.idea/libraries:JUnit4[test]",
"//tools/idea/.idea/libraries:protobuf",
"//tools/idea/platform/core-api:intellij.platform.core[module]",
- "//tools/idea/platform/platform-impl:intellij.platform.ide.impl[module]",
],
)
diff --git a/analytics/analytics.iml b/analytics/analytics.iml
index 16862bc286a..ee3e75a2e2e 100644
--- a/analytics/analytics.iml
+++ b/analytics/analytics.iml
@@ -15,6 +15,5 @@
<orderEntry type="library" scope="TEST" name="JUnit4" level="project" />
<orderEntry type="library" name="protobuf" level="project" />
<orderEntry type="module" module-name="intellij.platform.core" />
- <orderEntry type="module" module-name="intellij.platform.ide.impl" />
</component>
</module> \ No newline at end of file
diff --git a/analytics/src/com/android/tools/analytics/HighlightingStats.kt b/analytics/src/com/android/tools/analytics/HighlightingStats.kt
index 0ae86b0da48..4b521064631 100644
--- a/analytics/src/com/android/tools/analytics/HighlightingStats.kt
+++ b/analytics/src/com/android/tools/analytics/HighlightingStats.kt
@@ -15,7 +15,6 @@
*/
package com.android.tools.analytics
-import com.android.tools.analytics.HighlightingStats.reportHighlightingStats
import com.google.wireless.android.sdk.stats.AndroidStudioEvent
import com.google.wireless.android.sdk.stats.EditorFileType
import com.google.wireless.android.sdk.stats.EditorFileType.GROOVY
@@ -29,12 +28,11 @@ import com.google.wireless.android.sdk.stats.EditorFileType.UNKNOWN
import com.google.wireless.android.sdk.stats.EditorFileType.XML
import com.google.wireless.android.sdk.stats.EditorHighlightingStats
import com.intellij.concurrency.JobScheduler
-import com.intellij.ide.AppLifecycleListener
import com.intellij.openapi.Disposable
import com.intellij.openapi.application.ApplicationManager
+import com.intellij.openapi.components.Service
import com.intellij.openapi.editor.Document
import com.intellij.openapi.fileEditor.FileDocumentManager
-import com.intellij.openapi.util.Disposer
import com.intellij.openapi.vfs.VirtualFile
import org.HdrHistogram.Recorder
import java.util.concurrent.ConcurrentHashMap
@@ -44,15 +42,23 @@ import java.util.concurrent.TimeUnit
* Tracks highlighting latency across file types.
* To log an [AndroidStudioEvent] with the collected data, call [reportHighlightingStats].
*/
-object HighlightingStats : AppLifecycleListener {
- private const val MAX_LATENCY_MS = 10 * 60 * 1000 // Limit latencies to 10 minutes to ensure reasonable histogram size.
+@Service
+class HighlightingStats : Disposable {
+ companion object {
+ private const val MAX_LATENCY_MS = 10 * 60 * 1000 // Limit latencies to 10 minutes to ensure reasonable histogram size.
- override fun appStarted() {
+ @JvmStatic
+ fun getInstance(): HighlightingStats {
+ return ApplicationManager.getApplication().getService(HighlightingStats::class.java)
+ }
+ }
+
+ init {
// Send reports hourly.
JobScheduler.getScheduler().scheduleWithFixedDelay(this::reportHighlightingStats, 1, 1, TimeUnit.HOURS)
}
- override fun appWillBeClosed(isRestart: Boolean) {
+ override fun dispose() {
// Send reports on application close.
reportHighlightingStats()
}