Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
1118f62
feat(wall): track all threads for unfiltered wall-clock precheck
kaahos Jul 19, 2026
40dbe8e
Merge branch 'main' into paul.fournillon/wallclock-all-threads
kaahos Jul 20, 2026
d82291f
Merge branch 'main' into paul.fournillon/wallclock-all-threads
kaahos Jul 21, 2026
ec76f58
fix: apply review suggestions
kaahos Jul 21, 2026
52def55
Merge branch 'main' into paul.fournillon/wallclock-all-threads
kaahos Jul 21, 2026
9723a5a
Merge branch 'main' into paul.fournillon/wallclock-all-threads
kaahos Jul 22, 2026
f6c5ac1
feat(taskblock): capture stacks synchronously at block exit
kaahos Jul 15, 2026
28d722a
test: scope precheck workloads to all threads
kaahos Jul 16, 2026
5132e23
fix: restrict block suppression to all-thread scope
kaahos Jul 16, 2026
1a1e8ec
fix: preserve JVMTI frames in overlapping buffers
kaahos Jul 16, 2026
bcfb4f6
test: compare precheck counter delta
kaahos Jul 17, 2026
a074c1a
fix: address sphinx review
kaahos Jul 19, 2026
1d8c1f3
feat(taskblock): add JVM blocking producers
kaahos Jul 15, 2026
5be2fe6
test: verify JVM producers in all-thread scope
kaahos Jul 16, 2026
3208f71
fix: address sphinx review
kaahos Jul 20, 2026
0aff4da
feat: instrument blocking native I/O for TaskBlock events
kaahos Jul 15, 2026
e3afe8c
test: run native I/O producers in all-thread scope
kaahos Jul 16, 2026
0f15b2f
fix: skip VDSO parsing under sanitizers
kaahos Jul 17, 2026
dc2b037
fix: build native fixtures for GTest binaries
kaahos Jul 17, 2026
eca3d88
fix: compute ELF load bias in integer space
kaahos Jul 17, 2026
bf7dad7
fix: apply review
kaahos Jul 23, 2026
079e024
chore: address release script (#683)
kaahos Jul 23, 2026
abdabf8
[Automated] Bump dev version to 1.48.0 (#684)
dd-octo-sts[bot] Jul 23, 2026
db014ac
fix(codecache): make memoryUsage() accurate and live (#677)
rkennke Jul 23, 2026
be20ce9
chore: update token for version bump auto-merge (#685)
kaahos Jul 23, 2026
86e6bef
feat(profiler): native malloc/socket stack capture with profiler-hook…
jbachorik Jul 23, 2026
909714b
test: scope precheck workloads to all threads
kaahos Jul 16, 2026
58a5d3c
feat(taskblock): capture stacks synchronously at block exit
kaahos Jul 15, 2026
c476dc3
fix: address sphinx review
kaahos Jul 19, 2026
3919bfb
feat(taskblock): add JVM blocking producers
kaahos Jul 15, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 12 additions & 9 deletions .github/scripts/release.sh
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,13 @@ check_not_stuck() {
local base=$1
local branch=$2

[ -n "$DRYRUN" ] && return
git rev-parse "v_${base}" >/dev/null 2>&1 || return
if [ -n "$DRYRUN" ]; then
return 0
fi

if ! git show-ref --verify --quiet "refs/tags/v_${base}"; then
return 0
fi

echo "::error::${branch} is stuck at version ${base}, which is already tagged (v_${base})."
echo "::error::The automated post-release version-bump PR for this branch was never merged."
Expand Down Expand Up @@ -157,19 +162,17 @@ if [ -z "$DRYRUN" ]; then
BUMP_BRANCH="automated/bump-${CANDIDATE//./-}"
git checkout -b "$BUMP_BRANCH"
git push --force-with-lease --set-upstream origin "$BUMP_BRANCH"
# Create, label and merge with the federated BUMP_PR_TOKEN (not the ambient
# GITHUB_TOKEN): GitHub does not fire new workflow runs for events caused by
# the default GITHUB_TOKEN, so a GITHUB_TOKEN-applied label would never
# trigger approve-trivial.yml's `labeled` trigger and the PR would never
# auto-merge. Labeling is a separate call from creation so it produces its
# own `labeled` event rather than being folded into the `opened` payload.
# Create and label with the federated BUMP_PR_TOKEN: GitHub does not fire new
# workflow runs for labeled events caused by the default GITHUB_TOKEN, so the
# no-review label would never trigger approve-trivial.yml. Enable auto-merge
# with the write-enabled GITHUB_TOKEN after emitting the labeled event.
BUMP_PR_URL=$(GH_TOKEN="$BUMP_PR_TOKEN" gh pr create \
--title "[Automated] Bump dev version to ${CANDIDATE}" \
--body "Automated version bump after releasing v_${BASE}." \
--base "$BRANCH" \
--head "$BUMP_BRANCH")
GH_TOKEN="$BUMP_PR_TOKEN" gh pr edit "$BUMP_PR_URL" --add-label "no-review"
GH_TOKEN="$BUMP_PR_TOKEN" gh pr merge "$BUMP_PR_URL" --auto --squash
GH_TOKEN="$GITHUB_TOKEN" gh pr merge "$BUMP_PR_URL" --auto --squash
echo "BUMP_PR_URL=$BUMP_PR_URL" >> "${GITHUB_OUTPUT:-/dev/null}"
echo "✓ Version bump PR created and queued for auto-merge: $BUMP_PR_URL"
else
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,18 @@
/*
* Copyright 2026, Datadog, Inc.
*
* 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 com.datadoghq.native.config

Expand Down Expand Up @@ -149,7 +164,7 @@ object ConfigurationPresets {
config.compilerArgs.set(
listOf("-O0", "-g", "-DDEBUG") + commonLinuxCompilerArgs(version)
)
config.linkerArgs.set(commonLinuxLinkerArgs())
config.linkerArgs.set(commonLinuxLinkerArgs() + listOf("-Wl,-z,nodelete"))
}
Platform.MACOS -> {
config.compilerArgs.set(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
// Copyright 2026, Datadog, Inc.
// SPDX-License-Identifier: Apache-2.0

package com.datadoghq.native.gtest

Expand Down Expand Up @@ -200,6 +202,11 @@ class GtestPlugin : Plugin<Project> {
val buildGtestConfigTask = project.tasks.register("buildGtest${config.capitalizedName()}") {
group = "build"
description = "Compile and link all Google Tests for the ${config.name} build (no run)"
if (extension.buildNativeLibs.get()) {
// CI executes these binaries directly, so the build-only task must also produce
// the native fixtures that the binaries load at runtime.
dependsOn("buildNativeLibs")
}
}

// Compile all library sources ONCE for this config. Each test
Expand Down
2 changes: 1 addition & 1 deletion build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ plugins {
id("com.datadoghq.native-root")
}

version = "1.47.0-SNAPSHOT"
version = "1.48.0-SNAPSHOT"

apply(plugin = "com.dipien.semantic-version")
version = findProperty("ddprof_version") as? String ?: version
Expand Down
5 changes: 5 additions & 0 deletions ddprof-lib/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
// Copyright 2026, Datadog, Inc.
// SPDX-License-Identifier: Apache-2.0

import com.datadoghq.native.model.Platform
import com.datadoghq.native.util.PlatformUtils
import org.gradle.api.publish.maven.tasks.AbstractPublishToMaven
Expand Down Expand Up @@ -36,6 +39,8 @@ nativeBuild {
gtest {
testSourceDir.set(layout.projectDirectory.dir("src/test/cpp"))
mainSourceDir.set(layout.projectDirectory.dir("src/main/cpp"))
nativeLibsSourceDir.set(layout.projectDirectory.dir("src/test/resources/native-libs"))
nativeLibsOutputDir.set(rootProject.layout.buildDirectory.dir("test/resources/native-libs"))

// Include paths for compilation
val javaHome = PlatformUtils.javaHome()
Expand Down
11 changes: 11 additions & 0 deletions ddprof-lib/src/main/cpp/arguments.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -184,6 +184,17 @@ Error Arguments::parse(const char *args) {
msg = "walltpt must be > 0";
}

CASE("wallscope")
if (value == NULL || value[0] == 0) {
msg = "wallscope must not be empty";
} else if (strcmp(value, "all") == 0) {
_wallclock_scope = WALLCLOCK_SCOPE_ALL;
} else if (strcmp(value, "context") == 0) {
_wallclock_scope = WALLCLOCK_SCOPE_CONTEXT;
} else {
msg = "wallscope must be 'context' or 'all'";
}

CASE("event")
if (value == NULL || value[0] == 0) {
msg = "event must not be empty";
Expand Down
7 changes: 7 additions & 0 deletions ddprof-lib/src/main/cpp/arguments.h
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,11 @@ enum WallclockSampler {
JVMTI
};

enum WallclockScope {
WALLCLOCK_SCOPE_CONTEXT,
WALLCLOCK_SCOPE_ALL
};

enum Clock {
CLK_DEFAULT,
CLK_TSC,
Expand Down Expand Up @@ -171,6 +176,7 @@ class Arguments {
bool _wall_precheck;
int _wall_threads_per_tick;
WallclockSampler _wallclock_sampler;
WallclockScope _wallclock_scope;
long _memory;
bool _record_allocations;
bool _record_liveness;
Expand Down Expand Up @@ -212,6 +218,7 @@ class Arguments {
_wall_precheck(false),
_wall_threads_per_tick(DEFAULT_WALL_THREADS_PER_TICK),
_wallclock_sampler(ASGCT),
_wallclock_scope(WALLCLOCK_SCOPE_CONTEXT),
_memory(-1),
_record_allocations(false),
_record_liveness(false),
Expand Down
Loading