Skip to content

Commit 466cc40

Browse files
committed
changeCodePercentage
1 parent b88f7d8 commit 466cc40

File tree

3 files changed

+28
-11
lines changed

3 files changed

+28
-11
lines changed

plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/telemetry/CodeWhispererCodeCoverageTracker.kt

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ abstract class CodeWhispererCodeCoverageTracker(
4949
private val myServiceInvocationCount: AtomicInteger
5050
) : Disposable {
5151
val percentage: Long?
52-
get() = if (totalTokensSize != 0L) calculatePercentage(acceptedTokensSize, totalTokensSize) else null
52+
get() = if (totalTokensSize != 0L) calculatePercentage(rawAcceptedTokenSize, totalTokensSize) else null
5353
val acceptedTokensSize: Long
5454
get() = fileToTokens.map {
5555
it.value.acceptedTokens.get()
@@ -62,6 +62,12 @@ abstract class CodeWhispererCodeCoverageTracker(
6262
}.fold(0) { acc, next ->
6363
acc + next
6464
}
65+
val rawAcceptedTokenSize: Long
66+
get() = fileToTokens.map {
67+
it.value.rawAcceptedTokens.get()
68+
}.fold(0) { acc, next ->
69+
acc + next
70+
}
6571
val acceptedRecommendationsCount: Int
6672
get() = rangeMarkers.size
6773
val serviceInvocationCount: Int
@@ -177,6 +183,15 @@ abstract class CodeWhispererCodeCoverageTracker(
177183
tokens.acceptedTokens.addAndGet(delta)
178184
}
179185

186+
private fun incrementRawAcceptedTokens(document: Document, delta: Int) {
187+
var tokens = fileToTokens[document]
188+
if (tokens == null) {
189+
tokens = CodeCoverageTokens()
190+
fileToTokens[document] = tokens
191+
}
192+
tokens.rawAcceptedTokens.addAndGet(delta)
193+
}
194+
180195
private fun incrementTotalTokens(document: Document, delta: Int) {
181196
var tokens = fileToTokens[document]
182197
if (tokens == null) {
@@ -201,8 +216,6 @@ abstract class CodeWhispererCodeCoverageTracker(
201216
if (percentage == null) return
202217
if (myServiceInvocationCount.get() <= 0) return
203218

204-
// accepted char count without considering modification
205-
var rawAcceptedCharacterCount = 0L
206219
rangeMarkers.forEach { rangeMarker ->
207220
if (!rangeMarker.isValid) return@forEach
208221
// if users add more code upon the recommendation generated from CodeWhisperer, we consider those added part as userToken but not CwsprTokens
@@ -216,9 +229,9 @@ abstract class CodeWhispererCodeCoverageTracker(
216229
}
217230
return@forEach
218231
}
219-
rawAcceptedCharacterCount += originalRecommendation.length
220232
val delta = getAcceptedTokensDelta(originalRecommendation, modifiedRecommendation)
221233
runReadAction {
234+
incrementRawAcceptedTokens(rangeMarker.document, originalRecommendation.length)
222235
incrementAcceptedTokens(rangeMarker.document, delta)
223236
}
224237
}
@@ -230,7 +243,7 @@ abstract class CodeWhispererCodeCoverageTracker(
230243
val response = CodeWhispererClientAdaptor.getInstance(project).sendCodePercentageTelemetry(
231244
language,
232245
customizationArn,
233-
rawAcceptedCharacterCount,
246+
rawAcceptedTokenSize,
234247
totalTokensSize,
235248
acceptedTokensSize
236249
)
@@ -248,7 +261,7 @@ abstract class CodeWhispererCodeCoverageTracker(
248261
CodewhispererTelemetry.codePercentage(
249262
project = null,
250263
codewhispererAcceptedTokens = acceptedTokensSize,
251-
codewhispererSuggestedTokens = rawAcceptedCharacterCount,
264+
codewhispererSuggestedTokens = rawAcceptedTokenSize,
252265
codewhispererLanguage = language.toTelemetryType(),
253266
codewhispererPercentage = percentage,
254267
codewhispererTotalTokens = totalTokensSize,
@@ -282,7 +295,7 @@ abstract class CodeWhispererCodeCoverageTracker(
282295
private val LOG = getLogger<CodeWhispererCodeCoverageTracker>()
283296
private val instances: MutableMap<CodeWhispererProgrammingLanguage, CodeWhispererCodeCoverageTracker> = mutableMapOf()
284297

285-
fun calculatePercentage(acceptedTokens: Long, totalTokens: Long): Long = ((acceptedTokens.toDouble() * 100) / totalTokens).roundToLong()
298+
fun calculatePercentage(rawAcceptedTokenSize: Long, totalTokens: Long): Long = ((rawAcceptedTokenSize.toDouble() * 100) / totalTokens).roundToLong()
286299
fun getInstance(project: Project, language: CodeWhispererProgrammingLanguage): CodeWhispererCodeCoverageTracker =
287300
when (val instance = instances[language]) {
288301
null -> {
@@ -310,12 +323,14 @@ class DefaultCodeWhispererCodeCoverageTracker(project: Project, language: CodeWh
310323
AtomicInteger(0)
311324
)
312325

313-
class CodeCoverageTokens(totalTokens: Int = 0, acceptedTokens: Int = 0) {
326+
class CodeCoverageTokens(totalTokens: Int = 0, acceptedTokens: Int = 0, rawAcceptedTokens: Int = 0) {
314327
val totalTokens: AtomicInteger
315328
val acceptedTokens: AtomicInteger
329+
val rawAcceptedTokens: AtomicInteger
316330

317331
init {
318332
this.totalTokens = AtomicInteger(totalTokens)
319333
this.acceptedTokens = AtomicInteger(acceptedTokens)
334+
this.rawAcceptedTokens = AtomicInteger(rawAcceptedTokens)
320335
}
321336
}

plugins/amazonq/codewhisperer/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/codewhisperer/CodeWhispererCodeCoverageTrackerTest.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,7 @@ internal abstract class CodeWhispererCodeCoverageTrackerTestBase(myProjectRule:
141141
const val CWSPR_Language = "codewhispererLanguage"
142142
const val CWSPR_ACCEPTED_TOKENS = "codewhispererAcceptedTokens"
143143
const val CWSPR_TOTAL_TOKENS = "codewhispererTotalTokens"
144+
const val CWSPR_RAW_ACCEPTED_TOKENS = "codewhispererSuggestedTokens"
144145
}
145146
}
146147

@@ -429,7 +430,7 @@ internal class CodeWhispererCodeCoverageTrackerTestPython : CodeWhispererCodeCov
429430
TOTAL_SECONDS_IN_MINUTE,
430431
CodeWhispererPython.INSTANCE,
431432
mutableListOf(rangeMarkerMock1),
432-
mutableMapOf(fixture.editor.document to CodeCoverageTokens(totalTokens = 100, acceptedTokens = 0)),
433+
mutableMapOf(fixture.editor.document to CodeCoverageTokens(totalTokens = 100, acceptedTokens = 0, rawAcceptedTokens = 0)),
433434
1
434435
)
435436
) {
@@ -444,8 +445,9 @@ internal class CodeWhispererCodeCoverageTrackerTestPython : CodeWhispererCodeCov
444445
metricCaptor.allValues,
445446
CODE_PERCENTAGE,
446447
1,
447-
CWSPR_PERCENTAGE to "1",
448+
CWSPR_PERCENTAGE to "3",
448449
CWSPR_ACCEPTED_TOKENS to "1",
450+
CWSPR_RAW_ACCEPTED_TOKENS to "3",
449451
CWSPR_TOTAL_TOKENS to "100",
450452
)
451453
}

plugins/amazonq/codewhisperer/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/codewhisperer/CodeWhispererTelemetryTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -514,7 +514,7 @@ class CodeWhispererTelemetryTest : CodeWhispererTestBase() {
514514
"codewhispererAcceptedTokens" to acceptedTokensSize.toString(),
515515
"codewhispererTotalTokens" to totalTokensSize.toString(),
516516
"codewhispererSuggestedTokens" to rawAcceptedTokenSize.toString(),
517-
"codewhispererPercentage" to CodeWhispererCodeCoverageTracker.calculatePercentage(acceptedTokensSize, totalTokensSize).toString(),
517+
"codewhispererPercentage" to CodeWhispererCodeCoverageTracker.calculatePercentage(rawAcceptedTokenSize, totalTokensSize).toString(),
518518
)
519519
}
520520

0 commit comments

Comments
 (0)