{"adoption": {"forks": 236, "observed_at": "2026-08-28T04:06:21.846494+00:00", "stars": 2172}, "canonical_url": "https://ross.abutalabs.com/products/blockcanaryex", "card": {"archived": false, "artifact_type": "library", "description": "make performance bottleneck detection easily when app blocked", "domain": ["mobile-development", "performance", "developer-tools"], "enriched": true, "function": ["monitoring", "benchmarking", "developer-tools"], "health_score": 20, "homepage": null, "language": "Java", "license": "Apache-2.0", "license_family": "permissive", "maturity": "abandoned", "member_repos": ["seiginonakama/BlockCanaryEx"], "name": "seiginonakama/BlockCanaryEx", "platform": [], "pushed_at": "2017-08-23T03:29:40+00:00", "repo": "seiginonakama/BlockCanaryEx", "stars": 2172, "tags": ["android", "performance-monitoring", "blockcanary", "method-sampling", "gc-monitoring", "ui-performance", "jank-detection"], "topics": ["android", "performance-monitoring", "blockcanaryex", "findblock", "performance"], "urls": [], "use_cases": ["find heavy methods when my android app is blocked", "detect ui thread jank in android app", "profile method execution time during anr", "know when gc happens during app freeze", "monitor view measure layout draw performance", "debug slow android app performance"], "what_it_is": "BlockCanaryEx is an Android library, based on BlockCanary, that detects UI thread blocks and identifies the heavy methods causing them. It uses compile-time bytecode injection to sample method execution times, GC events, and view measure/layout/draw details during a block.", "when_to_avoid": ["you need an actively maintained tool or support for modern Android toolchains", "you only need basic block notifications without method sampling", "you cannot add a Gradle plugin or bytecode instrumentation to your build"], "when_to_choose": ["you are debugging UI thread blocks on an older Android project using Gradle and want method-level cost breakdowns", "you want to know which specific method, GC event, or view operation caused a frame drop"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/blockcanaryex", "repo": "seiginonakama/BlockCanaryEx", "role": "main", "score": 32}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:06:21.846494+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T02:49:14.200134+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5b7ed721fb832384c563493da1184fd0753d19cffcdeede9c036650b4fb833e9", "fetched_at": "2026-08-28T04:06:21.846494+00:00", "kind": "readme", "missing": false, "url": "https://github.com/seiginonakama/BlockCanaryEx"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:06:21.846494+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T02:49:14.200134+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5b7ed721fb832384c563493da1184fd0753d19cffcdeede9c036650b4fb833e9", "fetched_at": "2026-08-28T04:06:21.846494+00:00", "kind": "readme", "missing": false, "url": "https://github.com/seiginonakama/BlockCanaryEx"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T02:49:14.200134+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5b7ed721fb832384c563493da1184fd0753d19cffcdeede9c036650b4fb833e9", "fetched_at": "2026-08-28T04:06:21.846494+00:00", "kind": "readme", "missing": false, "url": "https://github.com/seiginonakama/BlockCanaryEx"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:06:21.846494+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:06:21.846494+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:06:21.846494+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T02:49:14.200134+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5b7ed721fb832384c563493da1184fd0753d19cffcdeede9c036650b4fb833e9", "fetched_at": "2026-08-28T04:06:21.846494+00:00", "kind": "readme", "missing": false, "url": "https://github.com/seiginonakama/BlockCanaryEx"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:06:21.846494+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:06:21.846494+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T02:49:14.200134+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5b7ed721fb832384c563493da1184fd0753d19cffcdeede9c036650b4fb833e9", "fetched_at": "2026-08-28T04:06:21.846494+00:00", "kind": "readme", "missing": false, "url": "https://github.com/seiginonakama/BlockCanaryEx"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:06:21.846494+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:06:21.846494+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:06:21.846494+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T02:49:14.200134+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5b7ed721fb832384c563493da1184fd0753d19cffcdeede9c036650b4fb833e9", "fetched_at": "2026-08-28T04:06:21.846494+00:00", "kind": "readme", "missing": false, "url": "https://github.com/seiginonakama/BlockCanaryEx"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:06:21.846494+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:06:21.846494+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T02:49:14.200134+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5b7ed721fb832384c563493da1184fd0753d19cffcdeede9c036650b4fb833e9", "fetched_at": "2026-08-28T04:06:21.846494+00:00", "kind": "readme", "missing": false, "url": "https://github.com/seiginonakama/BlockCanaryEx"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T02:49:14.200134+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5b7ed721fb832384c563493da1184fd0753d19cffcdeede9c036650b4fb833e9", "fetched_at": "2026-08-28T04:06:21.846494+00:00", "kind": "readme", "missing": false, "url": "https://github.com/seiginonakama/BlockCanaryEx"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T02:49:14.200134+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5b7ed721fb832384c563493da1184fd0753d19cffcdeede9c036650b4fb833e9", "fetched_at": "2026-08-28T04:06:21.846494+00:00", "kind": "readme", "missing": false, "url": "https://github.com/seiginonakama/BlockCanaryEx"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T02:49:14.200134+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5b7ed721fb832384c563493da1184fd0753d19cffcdeede9c036650b4fb833e9", "fetched_at": "2026-08-28T04:06:21.846494+00:00", "kind": "readme", "missing": false, "url": "https://github.com/seiginonakama/BlockCanaryEx"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 0, "longevity": 100, "rhythm": 35}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": ["no_releases"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 3467, "days_push": 3297, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 32, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}